diff --git a/.cspell.yaml b/.cspell.yaml index 88d983a2..8194d642 100644 --- a/.cspell.yaml +++ b/.cspell.yaml @@ -2,111 +2,213 @@ $schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell version: '0.2' ignorePaths: ['dist', 'node_modules'] words: + - abhilash + - abhishek + - abhishekdoshi + - addfirebase + - adekunle - afonso + - agentic + - aiks + - allowfullscreen - angelov + - aoki - apna + - apnaklub - araujo - arra - astro - astrojs + - atuoha - autoplay + - bdero + - behaviour - bhavesh - bigl + - bitrise + - blazor + - blockquotes + - brandonderosier + - brix - bryanoltman - cancelbots - - codemagic + - carrithers + - chromecast + - cinterop + - cloudwalk + - codegen + - codelabs - codelessly + - codemagic + - codesign - copplestone - - chromecast + - couchsurfing - cupertino + - cutover + - deliveryhero + - derosier - devnomic + - devrel + - dmarc - dominik + - doshi - dougall - dreamflow - droidcon + - easymac + - eich - eseidel - esra - evenodd + - exat - felangel - felangelov + - figcaption - findstr + - finsweet - fintech + - firebasehosting + - firebaserc - fluttercon - flutterconusa + - foldables - fontsource - - fouc - footguns + - forrester + - fouc - frontends - frontmatter + - futureproof - gallego - ghisi + - glsl + - gradlew - grayscale - hackathon + - hamen + - hashir - headshot - headshots + - hiαΊΏu + - hotfixes + - hotlinking - howzat - icaza - idris + - inlines - itar + - jadx + - jank + - janky + - jaspr + - jetpack - jsxs + - jundlegames - junglee - kadah - kalshi + - katz + - kelkar - kellar - kijiji - killop + - klingsbo - klub + - koin + - kotlinx + - ktor + - laksh - lavamoat - leeming + - lintrk - logcat + - lukas + - maccarrithers - macdougall - mailchimp - mairramer + - masahiro - miklas + - mishra + - morgillo + - mozallowfullscreen + - multiplatform - narkhede - neha + - nickshorebird + - nickweatherley + - noindex + - nowa - nowrap - nubank - - nowa - oltman - onclick - pageload - palo - parzych + - peloton - pichai + - podfile - posthog - pubspec - pushpress + - rasterizes + - referrerpolicy - renan + - renuka - roadmaps - rollout - rollouts - roszkowski - sagalov + - samdariya + - scapia + - scroller + - scrollport - seidel + - serverpod + - shiki + - shoaib - shorebirddev - shorebirdtech - siclen - signup - signups + - skia + - skie + - skiko + - slsa + - snopes - solana - solides - souza - - sundar - - sunsetting - - snopes - - stac + - spirv - squircle - squircles + - stac + - startswith + - statista + - stdlib + - styleguide + - subosito + - sundar + - sunsetting - superlist - taha + - tasco - techlead + - techmakers - tesser - thiago - tomarra + - toolkits - tradeling - transformative + - triaging + - trαΊ§n - tsconfigs + - tushar + - tusharghige - umit - underperforming - unsexy @@ -114,9 +216,22 @@ words: - upvoted - userbase - veloso + - vercel + - vetc + - videogame - vyuh - wagus + - weatherley + - webclip - webflow + - webkitallowfullscreen + - webp + - wesleypeck - widgetbook + - withings - wolt + - wordmark + - worktree + - xcarchive - xlink + - yehuda diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 00000000..7850e037 --- /dev/null +++ b/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "shorebird-website" + } +} diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 8735f5ca..6ae334ed 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -6,6 +6,23 @@ on: branches: - main +# Deploys go to Firebase Hosting in the `shorebird-website` GCP project (its +# own project, so the site's IAM is separate from everything else). CI +# authenticates with Workload Identity Federation through a pool in that same +# project whose provider only accepts tokens from this repository β€” no stored +# keys. The service account has `roles/firebasehosting.admin` there and +# nothing anywhere else (see CUTOVER.md Β§2). +env: + FIREBASE_PROJECT: shorebird-website + FIREBASE_TOOLS: firebase-tools@15.30.1 + WIF_PROVIDER: projects/170788650532/locations/global/workloadIdentityPools/github-actions/providers/github + SERVICE_ACCOUNT: website-deployer@shorebird-website.iam.gserviceaccount.com + +permissions: + contents: read + id-token: write # WIF + pull-requests: write # preview job comments the channel URL on the PR + jobs: build: runs-on: macos-latest @@ -36,43 +53,100 @@ jobs: - name: πŸ‘· Build website run: npm run build - deploy: - needs: build + - name: πŸ”— Check Links + run: npm run check:links - runs-on: macos-latest + # The build rewrites hosting.redirects in firebase.json from + # astro.config.mjs; a diff here means someone edited one and not the + # other. Run `npm run build` and commit firebase.json. + - name: πŸ” Check firebase.json redirects are committed + run: git diff --exit-code firebase.json - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + - name: πŸ“€ Upload build + uses: actions/upload-artifact@v4 + with: + name: dist + path: dist + retention-days: 7 + # `dist/.well-known/` (Microsoft domain verification) is hidden, and + # upload-artifact skips hidden files by default; without this the + # deploy jobs would publish a build that is missing it. + include-hidden-files: true + + # Every PR from this repo gets a Firebase Hosting preview channel with its + # own https URL, so the hosted checks in CUTOVER.md Β§3 can run before merge. + # Fork PRs are skipped: they cannot mint a WIF token for the repository. + preview: + needs: build + runs-on: ubuntu-latest + if: >- + github.event_name == 'pull_request' && + github.event.pull_request.head.repo.full_name == github.repository steps: - name: πŸ“š Git Checkout uses: actions/checkout@v7 - - name: βš™οΈ Setup Node - uses: actions/setup-node@v7 + - name: πŸ“₯ Download build + uses: actions/download-artifact@v4 with: - node-version: 24.x - cache: npm - cache-dependency-path: package-lock.json + name: dist + path: dist - - name: πŸ“¦ Install Dependencies - run: npm ci && npx --no allow-scripts - - - name: ✨ Check Format - run: npm run format:check + - name: πŸ” Authenticate to Google Cloud + uses: google-github-actions/auth@v3 + with: + workload_identity_provider: ${{ env.WIF_PROVIDER }} + service_account: ${{ env.SERVICE_ACCOUNT }} + + - name: ☁️ Deploy preview channel + id: channel + run: | + npx -y "$FIREBASE_TOOLS" hosting:channel:deploy "pr-${{ github.event.pull_request.number }}" \ + --project "$FIREBASE_PROJECT" --expires 7d --json > channel.json + url=$(python3 -c 'import json,sys; r=json.load(sys.stdin)["result"]; print(next(iter(r.values()))["url"])' < channel.json) + echo "url=$url" >> "$GITHUB_OUTPUT" + + - name: πŸ’¬ Comment preview URL + env: + GH_TOKEN: ${{ github.token }} + URL: ${{ steps.channel.outputs.url }} + run: | + body="🐦 Preview of ${{ github.event.pull_request.head.sha }}: $URL (expires in 7 days)" + # Edit the existing preview comment rather than adding one per push. + existing=$(gh api "repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" \ + --jq '.[] | select(.user.login == "github-actions[bot]" and (.body | startswith("🐦 Preview of"))) | .id' | head -1) + if [ -n "$existing" ]; then + gh api -X PATCH "repos/${{ github.repository }}/issues/comments/$existing" -f body="$body" > /dev/null + else + gh pr comment "${{ github.event.pull_request.number }}" --body "$body" + fi - - name: 🧹 Lint - run: npm run lint + deploy: + needs: build + runs-on: ubuntu-latest + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + concurrency: + group: deploy-production + cancel-in-progress: false - - name: πŸ”€ Check Spelling - run: npm run cspell + steps: + - name: πŸ“š Git Checkout + uses: actions/checkout@v7 - - name: πŸ‘· Build website - run: npm run build + - name: πŸ“₯ Download build + uses: actions/download-artifact@v4 + with: + name: dist + path: dist - - name: ☁️ Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v4 + - name: πŸ” Authenticate to Google Cloud + uses: google-github-actions/auth@v3 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./dist - user_name: github-actions[bot] - user_email: 41898282+github-actions[bot]@users.noreply.github.com + workload_identity_provider: ${{ env.WIF_PROVIDER }} + service_account: ${{ env.SERVICE_ACCOUNT }} + + - name: ☁️ Deploy to Firebase Hosting + run: | + npx -y "$FIREBASE_TOOLS" deploy --only hosting --project "$FIREBASE_PROJECT" \ + --message "${{ github.sha }}" diff --git a/.gitignore b/.gitignore index 8282df61..8756d995 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,11 @@ pnpm-debug.log* # macOS-specific files .DS_Store +.gstack/ + +# agent worktrees / local one-off exports +.claude/worktrees/ +blog_export.csv + +# python +__pycache__/ diff --git a/.prettierignore b/.prettierignore index 28b5a8dc..7d60e763 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,3 @@ src/motion/* +.claude/ +.firebaserc diff --git a/CUTOVER.md b/CUTOVER.md new file mode 100644 index 00000000..6a45cc7a --- /dev/null +++ b/CUTOVER.md @@ -0,0 +1,193 @@ +# Cutover checklist: Webflow β†’ Astro + +Burn-down for taking `shorebird.dev` off Webflow and serving it from this repo. +Hosting is Firebase Hosting in its own GCP project, `shorebird-website` +(`firebase.json`, `.firebaserc`), so the site's IAM is separate from every +production project. Cloudflare was considered and rejected: serving the apex +from Cloudflare requires moving the whole `shorebird.dev` DNS zone into one +Cloudflare account, and Cloudflare's one real advantage (free egress) is +irrelevant at this site's traffic. Firebase takes the apex via plain A records +in Cloud DNS, so nothing else on `shorebird.dev` moves. CI deploys `main` and +creates a preview channel per PR (`.github/workflows/main.yaml`). Nothing here +is done until its box is checked. + +## 1. Before we touch DNS + +- [ ] **Export Webflow's 301 redirect rules.** Webflow does not expose them in + the site export or the MCP tools we used. Two ways: + - Site settings β†’ Publishing β†’ 301 Redirects: copy the table by hand. + - Data API v2: + `curl -H "Authorization: Bearer $WEBFLOW_TOKEN" https://api.webflow.com/v2/sites/694e589e299270321119525e/redirects` + (needs a site token with `sites:read`). + - Add every rule to `redirects` in `astro.config.mjs` only. The build copies + them into `firebase.json` (`src/integrations/firebase.ts`), where Firebase + Hosting returns real 301s; Astro's own meta-refresh stubs are never reached + on the deployed site. Commit the regenerated `firebase.json` (CI fails if it + drifts). + - Then re-check the list once more on cutover day β€” anyone can add a rule in + Webflow between now and then. +- [ ] **Everything else Webflow keeps in Site Settings rather than content.** + None of this is in the CMS/page export; it was inventoried on 2026-09-14 + via the API where possible and must be re-checked by hand in the Webflow + dashboard on cutover day (Site settings β†’ General, Publishing, Forms, + Custom code, SEO, Integrations): + - Custom code (verified via API): site-level head = Plausible + (`pa-KkCTgCak2h0t6JBTj3Tgm`) + Unify tag; footer = LinkedIn insight + (`8654276`) + HubSpot (`js-na2.hs-scripts.com/246912764.js`). Plausible + + LinkedIn are ported; Unify + HubSpot are a decision (below). No registered + scripts. Per-page custom code: not readable via API without page ids, but + the rendered HTML in `../webflow-migration/webflow-export/pages/` contains + whatever was there; re-fetch any page edited after 2026-09-13. + - Forms (verified via API 2026-09-14): 15 form instances, all one of two + shapes (newsletter: `email` + `country` honeypot; guide: `firstName`, + `lastName`, `Email`, `country`), every one POSTing to + `https://app.loops.so/api/newsletter-form/clkle380400tojo0nmapdkds7`. The + newsletter forms were removed from the live site on 2026-09-15 and are not + in the port; only the guide form remains, posting to the same URL. No + Webflow email notifications, no form webhooks, so nothing to recreate; just + confirm nobody added one later. + - Webhooks (verified via API): none registered. + - `robots.txt`: live is just `Sitemap: https://shorebird.dev/sitemap.xml`. + Added `public/robots.txt` pointing at Astro's `sitemap-index.xml`. Check the + dashboard for any disallow rules or `noindex` page settings added later. + - SEO per page: titles/descriptions/OG were taken from the rendered HTML; the + site-wide share image, favicon and webclip are ported. Any page-level + `noindex`/canonical overrides live only in the page settings panel β€” scan + the page list. + - Domain/SSL settings, password-protected pages, localization: none in use + (locales disabled; verify nothing was added). + - Assets served from `cdn.prod.website-files.com` that other properties link + to: docs and console reference none (checked). Grep marketing emails / Loops + templates / social posts for `website-files.com` before the Webflow site is + deleted β€” those URLs die with the site. +- [ ] **Content freeze + final delta pull.** The port's snapshot is from + 2026-09-13. Anything published in Webflow after that must be re-imported + (`scripts/import_webflow.py --only blog,stories` against a fresh CMS + export; it only regenerates bodies that still carry the "Converted from + the Webflow CMS export" marker, so hand-edited posts are safe). Freeze + Webflow edits the day of cutover. +- [ ] **Test the Code Push guide form for real** on a preview deploy, with a + test address (the only form left after the newsletter was removed from the + live site). It posts to the same Loops endpoint Webflow used; confirm the + contact shows up in Loops with the right `source`/`userGroup`. +- [ ] **Decide on HubSpot chat and the Unify website tag.** Both were on every + Webflow page and were deliberately not ported. Plausible and the LinkedIn + insight tag are ported. Script and keys are in + `../webflow-migration/webflow-export/pages/home.html` if we want them. +- [ ] **Trailing slashes: decided, keep Astro's default** (`/blog/foo/`, + canonical + `og:url` + sitemap already agree). Webflow served `/blog/foo`; + `"trailingSlash": true` in `firebase.json` 301s the slash-less form to the + slash form, so inbound links keep working. Verify one on the preview. +- [ ] **Sitemap & robots.** `dist/sitemap-index.xml` is generated; confirm the + deployed host serves it and that no `robots.txt`/`noindex` from the + preview environment leaks to production. +- [ ] **Microsoft domain verification.** + `public/.well-known/microsoft-identity-association` is a hidden path, so + it needs `include-hidden-files` on the CI artifact upload and had to come + off `firebase.json`'s `ignore` list; it also has no extension, so + `firebase.json` sets its `Content-Type` explicitly. On the preview + channel, confirm `curl -i .../.well-known/microsoft-identity-association` + returns 200 with `application/json` and does **not** 301 to a trailing + slash. If nobody still needs the Entra app (`4fc38981-…`), delete the file + instead. +- [ ] **Console dependencies.** `/privacy/raw.json` and `/terms/raw.json` serve + the same JSON the pre-Webflow site served at `/privacy/raw` and + `/terms/raw`, which now 301 there; confirm the console reads them from the + new host and follows the redirect (the `content` field of + `/privacy/raw.json` no longer starts with the H1 β€” check nothing parses + that). +- [ ] **DNS stays on Google Cloud DNS.** Firebase Hosting takes the apex with A + records (and `www` with a CNAME or A records β€” the console tells you + which) plus a one-time TXT for ownership verification, all added in the + existing zone. `api`, `console`, `admin`, `download`, `artifacts`, + `handbook`, `docs`, MX/SPF/DKIM/DMARC and the verification TXTs are not + touched. Note the zone is **not** in the `shorebird-gws` project (Cloud + DNS API is disabled there); find which project owns it before cutover day + so whoever flips the records has access. + - Firebase provisions the certificate after the A records point at it; that + can take up to a few hours on first setup. The verification TXT can be added + early, and the `www` β†’ apex redirect is a setting in the same custom-domain + flow, so `www` needs no separate redirect machinery. + +## 2. Repo & CI + +- [ ] Un-archive `shorebirdtech/website`; remove the archival notice (done in + `README.md` on this branch). +- [x] **GCP project `shorebird-website`** (number `170788650532`) created + 2026-09-15 under the org, billing β†’ Dev (R&D) (`017BF2-4523FB-3E4FA8`; a + marketing site's egress isn't COGS β€” move it if finance disagrees). + Firebase added; Hosting site `shorebird-website` + (`https://shorebird-website.web.app`). Owner: eric@shorebird.dev; add a + second owner. +- [x] **Deploy identity via WIF, no keys.** + `website-deployer@shorebird-website.iam.gserviceaccount.com` has + `roles/firebasehosting.admin` on the project only. It is impersonated + through a WIF pool _in the same project_ + (`projects/170788650532/locations/global/workloadIdentityPools/github-actions/providers/github`) + whose attribute condition is + `attribute.repository == "shorebirdtech/website"`. The org's pool in + `code-push-dev` was left alone (its allow-list is Tofu-managed and holds + production repos). +- [ ] Open the PR from `webflow-port` (40+ commits; squash or not, your call). + `npm run build`, `format:check`, `cspell`, `check:links` are green. The PR + itself will exercise the `preview` job and comment its URL. +- [x] Replace the GitHub Pages deploy with Firebase Hosting: + `.github/workflows/main.yaml` now runs the same checks as the PR gate + (plus `check:links` and a `firebase.json` drift check), deploys a 7-day + **preview channel** per PR (URL commented on the PR) and + `firebase deploy --only hosting` on push to `main`. +- [x] Delete `public/CNAME` (GitHub Pages only). +- [x] Redirects: `hosting.redirects` in `firebase.json` is regenerated at build + from `redirects` in `astro.config.mjs` by `src/integrations/firebase.ts` β€” + one source of truth; add Webflow's 301s to the config only. +- [x] Custom 404: Firebase serves `dist/404.html` with a 404 status + automatically. +- [x] `www` β†’ apex: handled by Firebase's custom-domain redirect setting (see Β§1 + DNS), nothing in the repo. +- [ ] Delete the local `webflow-port-backup` ref once the PR is merged. + +## 3. Preview deploy β€” verify on https before DNS + +- [ ] `/jobs` Gem board renders (its CSP blocks `http://`, so this could not be + verified locally). +- [ ] Every URL in `../webflow-migration/webflow-export/live_urls.txt` returns + 200 (or a 301 to a 200) β€” `scripts/check_links.py` covers the build; this + is the hosted check. +- [ ] `www.shorebird.dev` β†’ `shorebird.dev` 301, and HTTPS on both. +- [ ] Share previews: paste `/`, one blog post, one success story into Slack / + LinkedIn post composer / X and check the image and title. +- [ ] Plausible receives events from the preview hostname (or add it as an extra + domain temporarily). +- [ ] Spot-check home and pricing on a real phone. + +## 4. Cutover day + +- [ ] Content freeze in Webflow (tell whoever edits the blog). +- [ ] **Final refresh, right before deploy:** re-export the CMS collections + (blogs `696386798ae9c71635fed478`, success stories + `696403bea4559c9c354e00a9`, authors, reviews, logos, teams) into + `../webflow-migration/webflow-export/cms/`, run + `python3 scripts/import_webflow.py --only blog,stories,data`, review the + diff (only new/changed CMS items should move), build, commit. +- [ ] Re-check the Webflow 301 list and Site Settings against the section-1 + inventory one last time. +- [ ] Firebase console β†’ Hosting β†’ Add custom domain `shorebird.dev` (with + "redirect `www` to it"). Add the TXT it asks for in Cloud DNS, wait for + verified, then replace Webflow's apex A record (`198.202.211.1`) and the + `www` CNAME (`cdn.webflow.com`) with the records Firebase gives you. Watch + for certificate issuance (site serves on `https://` without a warning). +- [ ] Do **not** delete the Webflow site. Unpublish it (or leave it on the + `webflow.io` subdomain) for 30 days as a rollback. +- [ ] Watch 404s for a week (Plausible "404" goal or Firebase Hosting usage) and + add redirects for anything real. +- [ ] Google Search Console: resubmit the sitemap. + +## 5. Afterwards + +- [ ] Archive `../webflow-migration/` (Webflow snapshot, screenshots, comparison + sheets, old CSV tooling) to Drive; nothing in the repo depends on it. +- [ ] Cancel the Webflow plan. +- [ ] Known, accepted differences from Webflow (see `PORT_REPORT.md`): no + scroll-scrubbed Lottie / nav animation, CSS marquee instead of Swiper, + styled code blocks in posts, success-story dates use `publish-date`, + mobile 404 layout fixed rather than copied. diff --git a/PLAN.md b/PLAN.md new file mode 100644 index 00000000..f86a69cf --- /dev/null +++ b/PLAN.md @@ -0,0 +1,156 @@ +# Port shorebird.dev from Webflow back to Astro + +Goal: stand up the existing Astro site in this repo (the "bones"), backfill +everything that was authored on Webflow since Jan 2026, and restyle it so it +looks near-identical to the live Webflow site. Do **not** replicate Webflow's +lazy-loading / jQuery / Swiper behaviour β€” plain Astro + Tailwind + React +islands, same as before. + +Rules for every agent: + +- Work only in this repo, on the local `webflow-port` branch. One commit per + logical piece. **Never push** β€” this repo is public and archived; the port + stays local until Eric decides otherwise. +- Don't touch Webflow (read-only API use only; never publish/update/delete). +- Run `npm run build`, `npm run format`, `npm run cspell` before each commit. +- Reference material lives in `../webflow-migration/webflow-export/` (see Phase + 0; it used to be in-repo). Prefer it over re-fetching. Live site is + `https://shorebird.dev` if you need to look. +- Keep the existing component structure and file layout. Add, don't rewrite. + +## Ground truth (what differs between repo and live) + +| Area | Repo (Jan 2026) | Live Webflow (Sep 2026) | +| --------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Blog posts | 39 in `src/content/blog` | 69 in CMS. 5 slugs renamed: `1.0β†’1`, `dart-3.5.0β†’dart-3-5-0`, `flutter-3.32-releaseβ†’flutter-3-32-release`, `growingβ†’shorebird-is-growing`, `building-great-developer-toolsβ†’building-good-software` | +| Success stories | 8 | 10 (`scapia`, `vetc` new). CMS adds `industry`, `company-size`, `website-url` fields | +| Pages | `/`, `/about`, `/pricing`, `/jobs`, `/blog`, `/success-stories`, `/legal/dpa`, `/privacy`, `/terms/*`, `/contact`, `/newsletter-signup` | Same, plus **`/product/code-push`**, **`/product/shorebird-ci`**, **`/code-push-guide`**. `/legal/dpa` β†’ `/dpa`. `/terms/ci`, `/terms/code-push` gone (verify) | +| Homepage | Old hero "Deliver instant updates" | New sections: "Build Flutter apps with confidence", "An opinionated platform for building", "Enterprise-scale infrastructure", customer quotes, etc. | +| Design | Old palette/layout | New tokens (below), General Sans, dark base with light sections | +| Blog metadata | title/description/author/date/cover | + `article-intro`, `reading-time`, `shared-image` (OG), `seo---title`, `seo---meta-description`, `highlight-article`, Author is a reference | + +Webflow design tokens (from `shorebird.webflow.shared.*.css`): + +``` +surface-1 #ffffff / dark #0d1117 text-1 #0d1117 / dark #f8f8f9 +surface-2 #f6f6f7 / dark #161c25 text-2 #5a6066 / dark #909aa3 +surface-3 #faf6f3 / dark #1e2733 border #00000014 / dark #ffffff1a +brand primary solid #79c0ff soft #e0f1ff +brand secondary solid #d49bff soft #f2e0ff +button primary gradient #916ebb β†’ #425ea3, white text +container padding 1.5rem mobile / 3.5rem desktop +font: General Sans (public/fonts/GeneralSans) +``` + +## Phase 0 β€” Export (DONE 2026-09-13; see `webflow-export/README.md`) + +Produce `webflow-export/`. It was committed to the repo during the port and +later moved out to `../webflow-migration/webflow-export/` (history rewritten so +it never landed) β€” 65MB of reference material has no business in a public repo: + +- `cms/blogs.json`, `cms/success-stories.json`, `cms/authors.json`, + `cms/reviews.json`, `cms/logos.json`, `cms/teams.json` β€” raw + `list_collection_items` output, all pages (site id `694e589e299270321119525e`, + blog collection `696386798ae9c71635fed478`, success stories + `696403bea4559c9c354e00a9`, authors `69724297af61d38ff721dfe2`, reviews + `694e5d40028af33128ed2496`, logos `6960f768b8a3f81c4c87088d`, teams + `69629e2d2a0dce5f45b0ed61`). +- `pages/.html` β€” `curl -L` of every non-CMS URL in the live sitemap + (home, about, pricing, jobs, blog index, success-stories index, product/\*, + code-push-guide, dpa, privacy, terms, design-system/styleguide). +- `css/shorebird.webflow.css` β€” the live stylesheet. +- `screenshots/-{desktop,mobile}-NN.png` β€” tiled full-res screenshots of + each live page (1440px / 390px wide, 1600px tall tiles). These are the visual + targets. +- `assets/` β€” every image/svg/lottie/font the static pages reference. + +## Phase 1 β€” Foundations (two agents, in parallel, on `main`) + +**1A. Content import** (script-driven; write `scripts/import_webflow.py`, stdlib +only like the existing `blog_to_csv.py`) + +- Convert every blog item to `src/content/blog/.md`. HTMLβ†’Markdown + (headings, paragraphs, lists, links, `
` β†’ fenced blocks, images,
+  bold/italic, blockquotes). Keep Webflow slugs as canonical.
+- Rename the 5 drifted repo files to the Webflow slugs; add redirects from the
+  old slugs in `astro.config.mjs`.
+- For posts that exist in both, prefer the repo Markdown (hand-written, has
+  cSpell hints) but update frontmatter from the CMS.
+- Extend the blog schema in `src/content/config.ts`: `intro?`, `readingTime?`,
+  `ogImage?`, `seoTitle?`, `seoDescription?`, `highlight?`. Author stays a
+  string key; map CMS author ids β†’ existing keys (`eseidel`, …) via
+  `authors.json`, adding new authors to wherever authors are defined
+  (`src/layouts/blog.astro` / `src/components/blog`).
+- Download every referenced `cdn.prod.website-files.com` image into
+  `src/assets/blog//` (covers into `src/assets/blog/covers/`) and rewrite
+  paths. No hotlinking.
+- Same for success stories β†’ `src/content/success-stories/.md`; add
+  `industry`, `companySize`, `website` to the schema; add `scapia`, `vetc`.
+- Write `src/data/{reviews,logos,team}.json` from the CMS for the homepage /
+  about page to consume.
+- Add any new words to `.cspell.yaml`; `npm run cspell` must pass.
+
+**1B. Design system** (owns `src/styles/global.css`, `tailwind.config.ts`,
+`src/components/ui/navbar.tsx`, `src/components/ui/footer.astro`,
+`src/components/ui/button.tsx`, `src/layouts/main.astro`)
+
+- Encode the tokens above as CSS variables + Tailwind theme. Theme model
+  (verified, see `webflow-export/README.md`): the page is dark by default and
+  individual sections opt into light with a `.is--mode_1`-style class; the
+  sticky nav swaps dark/light to match the section under it. There is no
+  `prefers-color-scheme` switching. Implement it as a `data-theme="light"`
+  section wrapper that overrides the surface/text variables.
+- Restyle nav (links: Product β–Ύ [Code Push, Shorebird CI], Pricing, Success
+  stories, Blog, About, Jobs; CTAs), footer, buttons, typography scale, section
+  spacing, container widths to match the Webflow screenshots.
+- Add the Plausible + LinkedIn pixel snippets from the live `` to
+  `main.astro` (Plausible script id is in `webflow-export/pages/home.html`).
+- Other agents must not edit 1B's files; they compose from them.
+
+## Phase 2 β€” Pages (parallel agents, each in its own worktree branch; do not
+
+edit files owned by 1B β€” if you need a token or shared component, note it in
+your final report instead)
+
+Each agent: read the target screenshot + exported HTML, restyle the existing
+Astro page/components to match, verify at desktop and ~400px widths with the
+`browse` skill against `npm run dev`, commit.
+
+- **2A Homepage** β€” `src/pages/index.astro` + `src/components/home/*`. Port the
+  Webflow section order and copy. Reuse `hero-motion`, `brands` (from
+  `logos.json`), `testimonials` (from `reviews.json`), `faq`, pricing overview.
+- **2B Product pages + guide** β€” new `src/pages/product/code-push.astro`,
+  `src/pages/product/shorebird-ci.astro`, `src/pages/code-push-guide.astro`.
+  Build from homepage components where possible; new components go under
+  `src/components/product/`.
+- **2C Blog** β€” `src/pages/blog/index.astro` (highlight article + grid + any
+  category/filter UI Webflow has), `src/layouts/blog.astro` (author, reading
+  time, cover, prose styling via `@tailwindcss/typography`, code block styling),
+  `rss.xml.ts` fields.
+- **2D Success stories** β€” index + `src/layouts/success-story.astro` with the
+  new industry/company-size/website sidebar.
+- **2E Pricing, About, Jobs, legal** β€” `pricing.astro` (+ calculator/plans
+  components), `about.astro` (team from `team.json`), `jobs.astro`, `dpa` (move
+  from `/legal/dpa` to `/dpa`, redirect old), `privacy`, `terms`. Verify whether
+  `/terms/ci` and `/terms/code-push` still exist on Webflow; if not, redirect
+  them to `/terms`.
+
+## Phase 3 β€” Integration + QA (one agent, serial, on `main`)
+
+- Merge the Phase 2 branches; resolve conflicts; `npm run build` clean.
+- `astro.config.mjs` redirects: old blog slugs, `/legal/dpa`, dropped terms
+  pages, anything else in the old redirect list that still applies.
+- Crawl `dist/` for broken internal links and missing images.
+- Every URL in `webflow-export/live_urls.txt` must resolve in `dist/` (or via
+  redirect) β€” except `/design-system/styleguide`, which we drop.
+- Side-by-side screenshot pass of every page vs `webflow-export/screenshots`;
+  write `PORT_REPORT.md` listing remaining visual diffs, ranked.
+- Remove the archival notice from `README.md`; delete `blog_export.csv` and
+  `scripts/blog_to_csv.py` (one-way Webflow tooling, no longer needed).
+- CI (`.github/workflows/main.yaml`) already builds + deploys to GitHub Pages;
+  leave as-is. DNS cutover from Webflow to Pages is a human step, out of scope.
+
+## Out of scope tonight
+
+- Pixel-perfect animation parity, Swiper carousels (use `marquee` / CSS).
+- Any push, deploy, or DNS change.
diff --git a/PORT_REPORT.md b/PORT_REPORT.md
new file mode 100644
index 00000000..9027585d
--- /dev/null
+++ b/PORT_REPORT.md
@@ -0,0 +1,120 @@
+# Webflow β†’ Astro port report
+
+Branch `webflow-port` (2026-09-13/14). The Astro site in this repo now
+reproduces the live Webflow site. The reference snapshot (CMS JSON, rendered
+pages, CSS, assets, screenshots) and the side-by-side comparison sheets live
+outside the repo in `../webflow-migration/`. `npm run build` emits 94 pages;
+`format:check`, `cspell` and `check:links` are green.
+
+## How to run
+
+```
+npm install
+npm run dev            # http://localhost:4321
+npm run build && npm run check:links
+```
+
+## What was ported
+
+| Route                                             | Source                                                            | Status  | Notes                                                                                                                               |
+| ------------------------------------------------- | ----------------------------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- |
+| `/`                                               | `src/pages/index.astro`, `src/components/home/*`                  | Done    | Hero Lottie, logo marquee, benefits, enterprise, security, testimonials, FAQ, JSON-LD                                               |
+| `/product/code-push`                              | `src/pages/product/code-push.astro`, `src/components/product/*`   | Done    | Arcade demo embed, Lottie motion                                                                                                    |
+| `/product/shorebird-ci`                           | `src/pages/product/shorebird-ci.astro`                            | Done    | Sunset notice page, as live                                                                                                         |
+| `/code-push-guide`                                | `src/pages/code-push-guide.astro`, `product/guide-form.tsx`       | Done    | Form posts to the same Loops endpoint as live, PDF in `public/guides/`                                                              |
+| `/pricing`                                        | `src/pages/pricing.astro`, `src/components/pricing/*`             | Done    | Monthly/yearly toggle, comparison table, FAQ                                                                                        |
+| `/about`                                          | `src/pages/about.astro`, `src/data/team.json`                     | Done    | Team from CMS `teams`                                                                                                               |
+| `/jobs`                                           | `src/pages/jobs.astro`                                            | Done    | Gem job board iframe (blank on `http://localhost`, see diffs)                                                                       |
+| `/blog`                                           | `src/pages/blog/index.astro`                                      | Done    | Highlight + latest + all 69 posts                                                                                                   |
+| `/blog/` (69)                               | `src/content/blog/*.md`, `src/layouts/blog.astro`                 | Done    | 30 posts imported from CMS, 39 kept from repo (5 renamed to Webflow slugs), sidebar newsletter                                      |
+| `/success-stories`                                | `src/pages/success-stories/index.astro`                           | Done    |                                                                                                                                     |
+| `/success-stories/` (10)                    | `src/content/success-stories/*.md`, `layouts/success-story.astro` | Done    | `scapia`, `vetc` added; industry / company size / website sidebar                                                                   |
+| `/dpa`, `/privacy`, `/terms`                      | `src/pages/{dpa.md,privacy/,terms/}`, `layouts/markdown.astro`    | Done    | `/legal/dpa`, `/terms/ci`, `/terms/code-push` redirect here; PDFs in `public/legal/`                                                |
+| `/contact`, `/newsletter-signup`, `/demo`         | β€”                                                                 | Removed | Pre-Webflow pages nothing linked to; `/demo` pointed at a personal Calendly. Removed 2026-09-15 so the port does not resurrect them |
+| `404`                                             | `src/pages/404.astro`                                             | Done    | Copy/bird/layout from the Webflow utility page; mobile stacks instead of copying the live overflow                                  |
+| `/rss.xml`, `/blog/rss.xml`, `/sitemap-index.xml` | `src/pages/*.ts`, `@astrojs/sitemap`                              | Done    | 69 RSS items, 94 sitemap URLs                                                                                                       |
+| `/design-system/styleguide`                       | β€”                                                                 | Dropped | Webflow-internal page                                                                                                               |
+
+Every URL in the live sitemap at export time
+(`webflow-migration/webflow-export/live_urls.txt`) resolves in `dist/` except
+the styleguide. Redirects (`astro.config.mjs`): 5 renamed blog slugs,
+`/legal/dpa`, `/terms/ci`, `/terms/code-push`, `/success-stories/pushpress/`,
+plus the pre-existing `/faq`, `/security`, `/talk-to-sales`, `/workshops`,
+`/privacy.html`, `/terms.html`, `/jobs/full-stack-software-engineer`.
+
+Head: ``/description match the live pages; default share image is the
+Webflow "shared image" (`public/open-graph.jpg`), posts use their CMS
+`shared-image`, stories their cover; favicon/apple-touch-icon are the live ones;
+Plausible + LinkedIn Insight tags are in `main.astro`.
+
+## Theme model
+
+`:root` is dark. `Section theme="light"` sets `data-theme="light"` on a
+full-bleed band, which redefines the surface/text/border tokens inside it
+(`src/styles/global.css`). The sticky navbar's theme is fixed per page: blog
+pages pass `initialTheme="light"` to `<Navbar />`, everything else is dark. An
+earlier version swapped the navbar theme to match the section scrolling under
+it; the live site does not do that, so it was removed (2026-09-15). No
+`prefers-color-scheme`. `<CtaBand />` + `<Footer />` are per-page. The
+after-footer newsletter block and the blog-sidebar newsletter card were removed
+from the live site in September 2026 and are not in the port.
+
+## Remaining differences vs Webflow (ranked)
+
+1. **Jobs board iframe** β€” `jobs.gem.com` sends
+   `frame-ancestors 'self' https://*`, so the board is blank when the site is
+   served over `http://` (dev, preview). It renders on `https://shorebird.dev`.
+   No fallback link is shown on the page.
+2. **Nav is in-flow, not overlaying the hero** β€” the sticky 80px header takes
+   space at the top; on live it also does, but Webflow animates its background
+   via a ScrollTrigger script. Visual result matches at rest; no scroll
+   animation.
+3. **Hero / product Lottie animations** β€” the exported `.lottie` bundles play
+   via `lottie-react` (autoplay, loop, paused when off-screen); Webflow's
+   scroll-triggered playback timing is not reproduced, so the terminal lines in
+   the hero can be mid-animation when the page is compared side by side.
+4. **Success story date** β€” we show the CMS `publish-date`; live shows
+   `lastPublished` (every story reads "July 31, 2026"), a Webflow template
+   quirk. Deliberate.
+5. **Blog code blocks** β€” live renders `<pre>` unstyled; the port uses the dark,
+   syntax-highlighted block from the old repo. Deliberate improvement.
+6. **Logo marquee** β€” CSS `animate-marquee` instead of Swiper; same logos, speed
+   approximated.
+7. **Guide download form** β€” posts to the live Loops endpoint with the same
+   hidden fields (`source=ebook-CP-guide`, `userGroup=web-download`) but was not
+   submitted end-to-end during the port. Webflow marked "Last name" required and
+   "First name" optional; the port requires first name and marks last name
+   optional instead (Loops only needs the email, and a required family name
+   excludes people who have one name or whose name orders the other way).
+8. **Forms elsewhere** β€” Webflow form success/error blocks are reproduced in
+   React; HubSpot chat widget (`js-na2.hs-scripts.com/246912764.js`) and the
+   Unify website tag (script and key in
+   `webflow-migration/webflow-export/pages/home.html`) were intentionally not
+   ported. Add to `src/layouts/main.astro` if wanted.
+9. **`/terms` and `/privacy` on `astro preview`** β€” the pre-existing
+   `/terms.html` β†’ `/terms` redirect emits `dist/terms.html/index.html`, and
+   Astro's preview server resolves `/terms` to that stub, producing a refresh
+   loop. GitHub Pages resolves `/terms` to `dist/terms/index.html` (this config
+   predates the Webflow move); use `/terms/` locally.
+10. **Repo size** β€” `src/assets` grew from 62 MB to 68 MB (new covers, product
+    and about imagery). Share images in `public/blog/og` are JPEG (6 MB, was 42
+    MB as PNG) and the 65 MB Webflow snapshot was moved out of the repo with the
+    branch history rewritten so neither ever landed in git.
+11. **Blog index on live** captures only ~7 tiles in the reference screenshots
+    (lazy-loaded grid); the port renders all 69 posts statically β€” same content,
+    longer page.
+12. Font preload warnings in headless Chrome ("preloaded but not used within a
+    few seconds") on text-light pages; harmless.
+
+## Human-only cutover steps
+
+Superseded by `CUTOVER.md` (the live burn-down list). Hosting is expected to be
+Cloudflare, not GitHub Pages; the GitHub Pages workflow and `public/CNAME` are
+leftovers to replace. Headline items: export Webflow's 301 rules (not in any
+export we have), content freeze + final delta import, test the Loops forms on a
+real deploy, DNS inventory before moving the apex.
+
+## Not resolved
+
+- No fallback for the Gem iframe when framing is blocked.
+- No end-to-end test of the Loops submission (Code Push guide form).
diff --git a/README.md b/README.md
index ff199590..30766d79 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,77 @@
-Archived on January 30, 2026 as we have moved this website over to Webflow as of
-January 29, 2026
-
 # Shorebird Site 🐦
 
-Home of the [shorebird.dev](https://shorebird.dev) site.
+Home of the [shorebird.dev](https://shorebird.dev) site: Astro 7 + Tailwind v4
+with a few React islands, deployed to Firebase Hosting (`firebase.json`, GCP
+project `shorebird-website`) by `.github/workflows/main.yaml` on every push to
+`main`. Pull requests get a preview URL commented on the PR. See `CUTOVER.md`
+for the DNS and custom-domain steps still pending.
+
+`firebase.json` caches `/_astro/**` and `/fonts/**` for a year as `immutable`.
+Astro fingerprints everything under `/_astro/`, but the font files in
+`public/fonts/` are named by hand β€” if a face is ever re-exported, change its
+filename (and the `@font-face`/preload in `src/styles/global.css` and
+`src/layouts/main.astro`) rather than overwriting it in place. Everything else,
+including HTML, uses Hosting's default `max-age=3600`.
+
+## Running locally
+
+```
+npm install
+npm run dev          # http://localhost:4321
+npm run build        # static site in dist/
+npm run preview      # serve dist/
+```
+
+Before committing: `npm run format`, `npm run cspell`, and (after a build)
+`npm run check:links`.
 
 ## Running with Docker 🐳
 
 ```
 docker compose up --build
 ```
+
+## Content
+
+- `src/content/blog/*.md` β€” blog posts. Frontmatter: `title`, `description`,
+  `author` (key into the `authors` map in `src/layouts/blog.astro`), `date`,
+  `cover`, plus the Webflow-era fields `intro`, `readingTime`, `ogImage`,
+  `seoTitle`, `seoDescription`, `highlight`. Body images live in
+  `src/assets/blog/<slug>/`, covers in `src/assets/blog/covers/`, share images
+  in `public/blog/og/` (JPEG on purpose: social crawlers don't reliably read
+  WebP/AVIF for `og:image`; everything shown on-site goes through Astro's image
+  pipeline, which emits WebP/AVIF itself).
+- `src/content/success-stories/*.md` β€” customer stories, with `industry`,
+  `companySize`, `website` and `highlights` for the sidebar.
+- `src/data/{reviews,logos,team}.json` β€” the homepage testimonials, the "Trusted
+  by" logo strip and the About page team grid. Image paths are `/src/assets/...`
+  strings resolved with `import.meta.glob`.
+- `src/pages/{dpa,privacy,terms}` β€” legal pages as Markdown; `/privacy/raw.json`
+  and `/terms/raw.json` expose the Markdown as JSON for the console (the
+  slash-less `/privacy/raw` and `/terms/raw` 301 there; a static host takes the
+  content type from the extension, so the name has to carry the `.json`).
+
+Scripts (Python 3, stdlib only):
+
+- `scripts/import_webflow.py` β€” one-time import of the Webflow CMS export into
+  `src/content` and `src/data` (downloads images, converts HTML to Markdown,
+  keeps hand-written posts). The snapshot it reads is kept outside the repo at
+  `../webflow-migration/webflow-export/` (override with `WEBFLOW_EXPORT=`).
+  Re-running regenerates every body that still carries the
+  `<!-- Converted from the Webflow CMS export ... -->` marker and rewrites
+  `src/data/*.json`, so hand edits made after the import are lost unless the
+  marker is removed first. It is kept for the final delta pull before cutover
+  (see `CUTOVER.md`); after that it is history, not a tool.
+- `scripts/check_links.py` β€” crawls `dist/**/*.html` and reports internal links,
+  images, scripts and `og:image` URLs that do not resolve to a file.
+  `npm run check:links` runs it against `dist/`.
+
+## Theme model
+
+The page background is dark (`:root`). Sections opt into light with
+`data-theme="light"` (see `src/components/ui/section.astro`), which redefines
+the surface/text/border tokens for everything inside. The sticky navbar's theme
+is fixed per page and matches the first section (light on blog pages via
+`initialTheme="light"`, dark everywhere else); it does not change as sections
+scroll under it. There is no system `prefers-color-scheme` switching, matching
+the Webflow site.
diff --git a/astro.config.mjs b/astro.config.mjs
index 717d3103..23e66a85 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -5,6 +5,7 @@ import tailwindcss from '@tailwindcss/vite';
 import react from '@astrojs/react';
 import sitemap from '@astrojs/sitemap';
 import config from './src/config';
+import firebase from './src/integrations/firebase';
 
 // https://astro.build/config
 export default defineConfig({
@@ -12,7 +13,7 @@ export default defineConfig({
   vite: {
     plugins: [tailwindcss()],
   },
-  integrations: [react(), sitemap(), mdx()],
+  integrations: [react(), sitemap(), mdx(), firebase()],
   redirects: {
     '/faq': 'https://docs.shorebird.dev/faq',
     '/privacy.html': '/privacy',
@@ -21,7 +22,23 @@ export default defineConfig({
     '/success-stories/pushpress/': '/success-stories/push-press',
     '/talk-to-sales': config.contactSales,
     '/terms.html': '/terms',
-    '/workshops': 'https://calendly.com/felix-shorebird/shorebird-workshop',
     '/jobs/full-stack-software-engineer': '/jobs',
+    // Legal pages moved when the site moved to Webflow: the DPA lives at
+    // `/dpa` and the per-product terms are PDFs linked from `/terms`.
+    '/legal/dpa': '/dpa',
+    '/terms/ci': '/terms',
+    '/terms/code-push': '/terms',
+    // The raw-legal-text endpoints have to end in `.json` for a static host to
+    // serve them as JSON (nothing rewrites the `content-type` at the edge);
+    // keep the old paths the console may still hold working.
+    '/privacy/raw': '/privacy/raw.json',
+    '/terms/raw': '/terms/raw.json',
+    // Blog slugs were renamed when the site moved to Webflow; Webflow's slugs
+    // are canonical now.
+    '/blog/1.0': '/blog/1',
+    '/blog/dart-3.5.0': '/blog/dart-3-5-0',
+    '/blog/flutter-3.32-release': '/blog/flutter-3-32-release',
+    '/blog/growing': '/blog/shorebird-is-growing',
+    '/blog/building-great-developer-tools': '/blog/building-good-software',
   },
 });
diff --git a/firebase.json b/firebase.json
new file mode 100644
index 00000000..3c2b358b
--- /dev/null
+++ b/firebase.json
@@ -0,0 +1,99 @@
+{
+  "hosting": {
+    "site": "shorebird-website",
+    "public": "dist",
+    "ignore": ["firebase.json", "**/node_modules/**"],
+    "trailingSlash": true,
+    "headers": [
+      {
+        "source": "/_astro/**",
+        "headers": [
+          {
+            "key": "Cache-Control",
+            "value": "public, max-age=31536000, immutable"
+          }
+        ]
+      },
+      {
+        "source": "/fonts/**",
+        "headers": [
+          {
+            "key": "Cache-Control",
+            "value": "public, max-age=31536000, immutable"
+          }
+        ]
+      },
+      {
+        "source": "/.well-known/microsoft-identity-association",
+        "headers": [{ "key": "Content-Type", "value": "application/json" }]
+      }
+    ],
+    "redirects": [
+      {
+        "source": "/faq{,/}",
+        "destination": "https://docs.shorebird.dev/faq",
+        "type": 301
+      },
+      { "source": "/privacy.html{,/}", "destination": "/privacy", "type": 301 },
+      {
+        "source": "/security{,/}",
+        "destination": "https://handbook.shorebird.dev/security",
+        "type": 301
+      },
+      {
+        "source": "/success-stories/pushpress{,/}",
+        "destination": "/success-stories/push-press",
+        "type": 301
+      },
+      {
+        "source": "/talk-to-sales{,/}",
+        "destination": "https://calendly.com/d/cmtb-j7m-qpb/shorebird-sales",
+        "type": 301
+      },
+      { "source": "/terms.html{,/}", "destination": "/terms", "type": 301 },
+      {
+        "source": "/jobs/full-stack-software-engineer{,/}",
+        "destination": "/jobs",
+        "type": 301
+      },
+      { "source": "/legal/dpa{,/}", "destination": "/dpa", "type": 301 },
+      { "source": "/terms/ci{,/}", "destination": "/terms", "type": 301 },
+      {
+        "source": "/terms/code-push{,/}",
+        "destination": "/terms",
+        "type": 301
+      },
+      {
+        "source": "/privacy/raw{,/}",
+        "destination": "/privacy/raw.json",
+        "type": 301
+      },
+      {
+        "source": "/terms/raw{,/}",
+        "destination": "/terms/raw.json",
+        "type": 301
+      },
+      { "source": "/blog/1.0{,/}", "destination": "/blog/1", "type": 301 },
+      {
+        "source": "/blog/dart-3.5.0{,/}",
+        "destination": "/blog/dart-3-5-0",
+        "type": 301
+      },
+      {
+        "source": "/blog/flutter-3.32-release{,/}",
+        "destination": "/blog/flutter-3-32-release",
+        "type": 301
+      },
+      {
+        "source": "/blog/growing{,/}",
+        "destination": "/blog/shorebird-is-growing",
+        "type": 301
+      },
+      {
+        "source": "/blog/building-great-developer-tools{,/}",
+        "destination": "/blog/building-good-software",
+        "type": 301
+      }
+    ]
+  }
+}
diff --git a/package-lock.json b/package-lock.json
index 43161c7e..68ad696b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,10 +12,8 @@
         "@astrojs/react": "^6.0.5",
         "@astrojs/rss": "^4.0.19",
         "@astrojs/sitemap": "^3.7.4",
-        "@base-ui-components/react": "^1.0.0-rc.0",
         "@lavamoat/preinstall-always-fail": "^3.0.0",
         "@phosphor-icons/react": "^2.1.10",
-        "@radix-ui/react-accordion": "^1.2.20",
         "@radix-ui/react-dialog": "^1.1.23",
         "@radix-ui/react-slot": "^1.2.4",
         "@tailwindcss/vite": "^4.3.3",
@@ -25,10 +23,8 @@
         "class-variance-authority": "^0.7.1",
         "clsx": "^2.1.1",
         "lottie-react": "^3.1.2",
-        "lucide-react": "^1.45.0",
         "react": "^19.3.0",
         "react-dom": "^19.3.0",
-        "react-markdown": "^10.1.0",
         "sharp": "^0.35.4",
         "tailwind-merge": "^3.7.0",
         "tailwindcss": "^4.0.3",
@@ -609,13 +605,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/runtime": {
-      "version": "7.28.4",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/template": {
       "version": "7.29.7",
       "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
@@ -661,56 +650,6 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@base-ui-components/react": {
-      "version": "1.0.0-rc.0",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/runtime": "^7.28.4",
-        "@base-ui-components/utils": "0.2.2",
-        "@floating-ui/react-dom": "^2.1.6",
-        "@floating-ui/utils": "^0.2.10",
-        "reselect": "^5.1.1",
-        "tabbable": "^6.3.0",
-        "use-sync-external-store": "^1.6.0"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/mui-org"
-      },
-      "peerDependencies": {
-        "@types/react": "^17 || ^18 || ^19",
-        "react": "^17 || ^18 || ^19",
-        "react-dom": "^17 || ^18 || ^19"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@base-ui-components/utils": {
-      "version": "0.2.2",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/runtime": "^7.28.4",
-        "@floating-ui/utils": "^0.2.10",
-        "reselect": "^5.1.1",
-        "use-sync-external-store": "^1.6.0"
-      },
-      "peerDependencies": {
-        "@types/react": "^17 || ^18 || ^19",
-        "react": "^17 || ^18 || ^19",
-        "react-dom": "^17 || ^18 || ^19"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@bruits/satteri-darwin-arm64": {
       "version": "0.10.5",
       "resolved": "https://registry.npmjs.org/@bruits/satteri-darwin-arm64/-/satteri-darwin-arm64-0.10.5.tgz",
@@ -1539,6 +1478,7 @@
       "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==",
       "license": "MIT",
       "optional": true,
+      "peer": true,
       "dependencies": {
         "@emnapi/wasi-threads": "1.2.3",
         "tslib": "^2.4.0"
@@ -1560,6 +1500,7 @@
       "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==",
       "license": "MIT",
       "optional": true,
+      "peer": true,
       "dependencies": {
         "tslib": "^2.4.0"
       }
@@ -1820,6 +1761,22 @@
         "node": ">=18"
       }
     },
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
+      "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/@esbuild/netbsd-arm64": {
       "version": "0.28.2",
       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
@@ -1964,36 +1921,6 @@
         "node": ">=18"
       }
     },
-    "node_modules/@floating-ui/core": {
-      "version": "1.7.3",
-      "license": "MIT",
-      "dependencies": {
-        "@floating-ui/utils": "^0.2.10"
-      }
-    },
-    "node_modules/@floating-ui/dom": {
-      "version": "1.7.4",
-      "license": "MIT",
-      "dependencies": {
-        "@floating-ui/core": "^1.7.3",
-        "@floating-ui/utils": "^0.2.10"
-      }
-    },
-    "node_modules/@floating-ui/react-dom": {
-      "version": "2.1.6",
-      "license": "MIT",
-      "dependencies": {
-        "@floating-ui/dom": "^1.7.4"
-      },
-      "peerDependencies": {
-        "react": ">=16.8.0",
-        "react-dom": ">=16.8.0"
-      }
-    },
-    "node_modules/@floating-ui/utils": {
-      "version": "0.2.10",
-      "license": "MIT"
-    },
     "node_modules/@gar/promise-retry": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.3.tgz",
@@ -2738,6 +2665,8 @@
     },
     "node_modules/@phosphor-icons/react": {
       "version": "2.1.10",
+      "resolved": "https://registry.npmjs.org/@phosphor-icons/react/-/react-2.1.10.tgz",
+      "integrity": "sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==",
       "license": "MIT",
       "engines": {
         "node": ">=10"
@@ -2760,93 +2689,6 @@
       "integrity": "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q==",
       "license": "MIT"
     },
-    "node_modules/@radix-ui/react-accordion": {
-      "version": "1.2.20",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.20.tgz",
-      "integrity": "sha512-jDhG9FvAEnlhnjrsINbNXcUa4G+L1KqSkJSunkbKEzFRcAb52jvM0PjPxPRvhe1HNc5F5yc0yzzWeeqlH4yBIg==",
-      "license": "MIT",
-      "dependencies": {
-        "@radix-ui/primitive": "1.1.7",
-        "@radix-ui/react-collapsible": "1.1.20",
-        "@radix-ui/react-collection": "1.1.15",
-        "@radix-ui/react-compose-refs": "1.1.5",
-        "@radix-ui/react-context": "1.2.2",
-        "@radix-ui/react-direction": "1.1.4",
-        "@radix-ui/react-id": "1.1.4",
-        "@radix-ui/react-primitive": "2.1.10",
-        "@radix-ui/react-use-controllable-state": "1.2.6"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@radix-ui/react-collapsible": {
-      "version": "1.1.20",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.20.tgz",
-      "integrity": "sha512-mcGesGplBnzN2sbvJETzpCNfSMyPnb29q1GRLU+Ib7bJrpIG2ywmRoh2V5VbA2uNvKikKUlVbAPks7JDjz4A8Q==",
-      "license": "MIT",
-      "dependencies": {
-        "@radix-ui/primitive": "1.1.7",
-        "@radix-ui/react-compose-refs": "1.1.5",
-        "@radix-ui/react-context": "1.2.2",
-        "@radix-ui/react-id": "1.1.4",
-        "@radix-ui/react-presence": "1.1.10",
-        "@radix-ui/react-primitive": "2.1.10",
-        "@radix-ui/react-use-controllable-state": "1.2.6",
-        "@radix-ui/react-use-layout-effect": "1.1.4"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@radix-ui/react-collection": {
-      "version": "1.1.15",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.15.tgz",
-      "integrity": "sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA==",
-      "license": "MIT",
-      "dependencies": {
-        "@radix-ui/react-compose-refs": "1.1.5",
-        "@radix-ui/react-context": "1.2.2",
-        "@radix-ui/react-primitive": "2.1.10",
-        "@radix-ui/react-slot": "1.3.3"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@radix-ui/react-compose-refs": {
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.5.tgz",
@@ -2914,21 +2756,6 @@
         }
       }
     },
-    "node_modules/@radix-ui/react-direction": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.4.tgz",
-      "integrity": "sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg==",
-      "license": "MIT",
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@radix-ui/react-dismissable-layer": {
       "version": "1.1.19",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.19.tgz",
@@ -3531,346 +3358,97 @@
         "tailwindcss": "4.3.3"
       }
     },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
-      "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
-      "license": "MPL-2.0",
-      "dependencies": {
-        "detect-libc": "^2.0.3"
-      },
+    "node_modules/@tailwindcss/oxide": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz",
+      "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==",
+      "license": "MIT",
       "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "node": ">= 20"
       },
       "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"
+        "@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"
       }
     },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-android-arm64": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
-      "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
+    "node_modules/@tailwindcss/oxide-android-arm64": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz",
+      "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==",
       "cpu": [
         "arm64"
       ],
-      "license": "MPL-2.0",
+      "license": "MIT",
       "optional": true,
       "os": [
         "android"
       ],
       "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "node": ">= 20"
       }
     },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-arm64": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
-      "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
+    "node_modules/@tailwindcss/oxide-darwin-arm64": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz",
+      "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==",
       "cpu": [
         "arm64"
       ],
-      "license": "MPL-2.0",
+      "license": "MIT",
       "optional": true,
       "os": [
         "darwin"
       ],
       "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "node": ">= 20"
       }
     },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-x64": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
-      "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
+    "node_modules/@tailwindcss/oxide-darwin-x64": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz",
+      "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==",
       "cpu": [
         "x64"
       ],
-      "license": "MPL-2.0",
+      "license": "MIT",
       "optional": true,
       "os": [
         "darwin"
       ],
       "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "node": ">= 20"
       }
     },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-freebsd-x64": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
-      "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
+    "node_modules/@tailwindcss/oxide-freebsd-x64": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz",
+      "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==",
       "cpu": [
         "x64"
       ],
-      "license": "MPL-2.0",
+      "license": "MIT",
       "optional": true,
       "os": [
         "freebsd"
       ],
       "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "node": ">= 20"
       }
     },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm-gnueabihf": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
-      "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
-      "cpu": [
-        "arm"
-      ],
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-gnu": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
-      "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-musl": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
-      "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
-      "cpu": [
-        "arm64"
-      ],
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-gnu": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
-      "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-musl": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
-      "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-arm64-msvc": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
-      "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
-      "cpu": [
-        "arm64"
-      ],
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-x64-msvc": {
-      "version": "1.32.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
-      "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@tailwindcss/oxide": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz",
-      "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==",
-      "license": "MIT",
-      "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"
-      }
-    },
-    "node_modules/@tailwindcss/oxide-android-arm64": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz",
-      "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==",
-      "cpu": [
-        "arm64"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 20"
-      }
-    },
-    "node_modules/@tailwindcss/oxide-darwin-arm64": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz",
-      "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==",
-      "cpu": [
-        "arm64"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 20"
-      }
-    },
-    "node_modules/@tailwindcss/oxide-darwin-x64": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz",
-      "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 20"
-      }
-    },
-    "node_modules/@tailwindcss/oxide-freebsd-x64": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz",
-      "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">= 20"
-      }
-    },
-    "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz",
-      "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==",
+    "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz",
+      "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==",
       "cpu": [
         "arm"
       ],
@@ -3976,42 +3554,102 @@
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz",
-      "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": {
+      "version": "1.11.1",
+      "inBundle": true,
       "license": "MIT",
       "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 20"
+      "dependencies": {
+        "@emnapi/wasi-threads": "1.2.2",
+        "tslib": "^2.4.0"
       }
     },
-    "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz",
-      "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": {
+      "version": "1.11.1",
+      "inBundle": true,
       "license": "MIT",
       "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 20"
+      "dependencies": {
+        "tslib": "^2.4.0"
       }
     },
-    "node_modules/@tailwindcss/typography": {
-      "version": "0.5.20",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.20.tgz",
-      "integrity": "sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==",
+    "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
+      "version": "1.2.2",
+      "inBundle": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
+      "version": "1.1.4",
+      "inBundle": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@tybys/wasm-util": "^0.10.1"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/Brooooooklyn"
+      },
+      "peerDependencies": {
+        "@emnapi/core": "^1.7.1",
+        "@emnapi/runtime": "^1.7.1"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": {
+      "version": "0.10.2",
+      "inBundle": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": {
+      "version": "2.8.1",
+      "inBundle": true,
+      "license": "0BSD",
+      "optional": true
+    },
+    "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz",
+      "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 20"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz",
+      "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 20"
+      }
+    },
+    "node_modules/@tailwindcss/typography": {
+      "version": "0.5.20",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.20.tgz",
+      "integrity": "sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4086,19 +3724,16 @@
         "@babel/types": "^7.28.2"
       }
     },
-    "node_modules/@types/debug": {
-      "version": "4.1.12",
-      "license": "MIT",
-      "dependencies": {
-        "@types/ms": "*"
-      }
-    },
     "node_modules/@types/estree": {
-      "version": "1.0.7",
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+      "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
       "license": "MIT"
     },
     "node_modules/@types/estree-jsx": {
       "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+      "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
       "license": "MIT",
       "dependencies": {
         "@types/estree": "*"
@@ -4115,15 +3750,13 @@
     },
     "node_modules/@types/mdast": {
       "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+      "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
       "license": "MIT",
       "dependencies": {
         "@types/unist": "*"
       }
     },
-    "node_modules/@types/ms": {
-      "version": "2.1.0",
-      "license": "MIT"
-    },
     "node_modules/@types/nlcst": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
@@ -4171,10 +3804,14 @@
     },
     "node_modules/@types/unist": {
       "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+      "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
       "license": "MIT"
     },
     "node_modules/@ungap/structured-clone": {
-      "version": "1.3.0",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz",
+      "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==",
       "license": "ISC"
     },
     "node_modules/@vitejs/plugin-react": {
@@ -4298,7 +3935,9 @@
       "license": "Python-2.0"
     },
     "node_modules/aria-hidden": {
-      "version": "1.2.4",
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz",
+      "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.0.0"
@@ -4407,63 +4046,6 @@
         }
       }
     },
-    "node_modules/astro/node_modules/@esbuild/linux-x64": {
-      "version": "0.28.2",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
-      "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/astro/node_modules/esbuild": {
-      "version": "0.28.2",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
-      "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
-      "hasInstallScript": true,
-      "license": "MIT",
-      "bin": {
-        "esbuild": "bin/esbuild"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.28.2",
-        "@esbuild/android-arm": "0.28.2",
-        "@esbuild/android-arm64": "0.28.2",
-        "@esbuild/android-x64": "0.28.2",
-        "@esbuild/darwin-arm64": "0.28.2",
-        "@esbuild/darwin-x64": "0.28.2",
-        "@esbuild/freebsd-arm64": "0.28.2",
-        "@esbuild/freebsd-x64": "0.28.2",
-        "@esbuild/linux-arm": "0.28.2",
-        "@esbuild/linux-arm64": "0.28.2",
-        "@esbuild/linux-ia32": "0.28.2",
-        "@esbuild/linux-loong64": "0.28.2",
-        "@esbuild/linux-mips64el": "0.28.2",
-        "@esbuild/linux-ppc64": "0.28.2",
-        "@esbuild/linux-riscv64": "0.28.2",
-        "@esbuild/linux-s390x": "0.28.2",
-        "@esbuild/linux-x64": "0.28.2",
-        "@esbuild/netbsd-arm64": "0.28.2",
-        "@esbuild/netbsd-x64": "0.28.2",
-        "@esbuild/openbsd-arm64": "0.28.2",
-        "@esbuild/openbsd-x64": "0.28.2",
-        "@esbuild/openharmony-arm64": "0.28.2",
-        "@esbuild/sunos-x64": "0.28.2",
-        "@esbuild/win32-arm64": "0.28.2",
-        "@esbuild/win32-ia32": "0.28.2",
-        "@esbuild/win32-x64": "0.28.2"
-      }
-    },
     "node_modules/astro/node_modules/magic-string": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.1.tgz",
@@ -4484,6 +4066,8 @@
     },
     "node_modules/bail": {
       "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+      "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -4514,6 +4098,8 @@
     },
     "node_modules/bin-links": {
       "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz",
+      "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -4600,6 +4186,8 @@
     },
     "node_modules/ccount": {
       "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+      "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -4607,11 +4195,13 @@
       }
     },
     "node_modules/chalk": {
-      "version": "5.6.2",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-6.0.0.tgz",
+      "integrity": "sha512-2uNTXIuTTxk7ciZgAU1BQcgnchcG0xXnrs6jzkQfj9SsRa9M2s5zE8WT96hS6KmG4MzWHSrvH43DF1m4XRkrFg==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+        "node": ">=22"
       },
       "funding": {
         "url": "https://github.com/chalk/chalk?sponsor=1"
@@ -4619,6 +4209,8 @@
     },
     "node_modules/chalk-template": {
       "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.2.tgz",
+      "integrity": "sha512-2bxTP2yUH7AJj/VAXfcA+4IcWGdQ87HwBANLt5XxGTeomo8yG0y95N1um9i5StvhT/Bl0/2cARA5v1PpPXUxUA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4631,16 +4223,23 @@
         "url": "https://github.com/chalk/chalk-template?sponsor=1"
       }
     },
-    "node_modules/character-entities": {
-      "version": "2.0.2",
+    "node_modules/chalk-template/node_modules/chalk": {
+      "version": "5.6.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+      "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+      "dev": true,
       "license": "MIT",
+      "engines": {
+        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+      },
       "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
     "node_modules/character-entities-html4": {
       "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+      "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -4649,14 +4248,8 @@
     },
     "node_modules/character-entities-legacy": {
       "version": "3.0.0",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/character-reference-invalid": {
-      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+      "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -4705,6 +4298,8 @@
     },
     "node_modules/class-variance-authority": {
       "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+      "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
       "license": "Apache-2.0",
       "dependencies": {
         "clsx": "^2.1.1"
@@ -4730,6 +4325,8 @@
     },
     "node_modules/clsx": {
       "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
       "license": "MIT",
       "engines": {
         "node": ">=6"
@@ -4737,6 +4334,8 @@
     },
     "node_modules/cmd-shim": {
       "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz",
+      "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==",
       "dev": true,
       "license": "ISC",
       "engines": {
@@ -4765,6 +4364,8 @@
     },
     "node_modules/comma-separated-tokens": {
       "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+      "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -5021,19 +4622,6 @@
         "@cspell/cspell-types": "10.3.2"
       }
     },
-    "node_modules/cspell/node_modules/chalk": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-6.0.0.tgz",
-      "integrity": "sha512-2uNTXIuTTxk7ciZgAU1BQcgnchcG0xXnrs6jzkQfj9SsRa9M2s5zE8WT96hS6KmG4MzWHSrvH43DF1m4XRkrFg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=22"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
     "node_modules/css-select": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz",
@@ -5077,6 +4665,8 @@
     },
     "node_modules/cssesc": {
       "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -5121,10 +4711,14 @@
     },
     "node_modules/csstype": {
       "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+      "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
       "license": "MIT"
     },
     "node_modules/debug": {
       "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
       "license": "MIT",
       "dependencies": {
         "ms": "^2.1.3"
@@ -5138,17 +4732,6 @@
         }
       }
     },
-    "node_modules/decode-named-character-reference": {
-      "version": "1.0.2",
-      "license": "MIT",
-      "dependencies": {
-        "character-entities": "^2.0.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
     "node_modules/defu": {
       "version": "6.1.7",
       "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
@@ -5157,6 +4740,8 @@
     },
     "node_modules/dequal": {
       "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
       "license": "MIT",
       "engines": {
         "node": ">=6"
@@ -5170,6 +4755,8 @@
     },
     "node_modules/detect-libc": {
       "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+      "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
       "license": "Apache-2.0",
       "engines": {
         "node": ">=8"
@@ -5189,6 +4776,8 @@
     },
     "node_modules/devlop": {
       "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+      "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
       "license": "MIT",
       "dependencies": {
         "dequal": "^2.0.0"
@@ -5341,6 +4930,47 @@
       "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==",
       "license": "MIT"
     },
+    "node_modules/esbuild": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
+      "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.28.2",
+        "@esbuild/android-arm": "0.28.2",
+        "@esbuild/android-arm64": "0.28.2",
+        "@esbuild/android-x64": "0.28.2",
+        "@esbuild/darwin-arm64": "0.28.2",
+        "@esbuild/darwin-x64": "0.28.2",
+        "@esbuild/freebsd-arm64": "0.28.2",
+        "@esbuild/freebsd-x64": "0.28.2",
+        "@esbuild/linux-arm": "0.28.2",
+        "@esbuild/linux-arm64": "0.28.2",
+        "@esbuild/linux-ia32": "0.28.2",
+        "@esbuild/linux-loong64": "0.28.2",
+        "@esbuild/linux-mips64el": "0.28.2",
+        "@esbuild/linux-ppc64": "0.28.2",
+        "@esbuild/linux-riscv64": "0.28.2",
+        "@esbuild/linux-s390x": "0.28.2",
+        "@esbuild/linux-x64": "0.28.2",
+        "@esbuild/netbsd-arm64": "0.28.2",
+        "@esbuild/netbsd-x64": "0.28.2",
+        "@esbuild/openbsd-arm64": "0.28.2",
+        "@esbuild/openbsd-x64": "0.28.2",
+        "@esbuild/openharmony-arm64": "0.28.2",
+        "@esbuild/sunos-x64": "0.28.2",
+        "@esbuild/win32-arm64": "0.28.2",
+        "@esbuild/win32-ia32": "0.28.2",
+        "@esbuild/win32-x64": "0.28.2"
+      }
+    },
     "node_modules/escalade": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -5364,14 +4994,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/estree-util-is-identifier-name": {
-      "version": "3.0.0",
-      "license": "MIT",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/eventemitter3": {
       "version": "5.0.4",
       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
@@ -5387,6 +5009,8 @@
     },
     "node_modules/extend": {
       "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
       "license": "MIT"
     },
     "node_modules/fast-equals": {
@@ -5464,6 +5088,8 @@
     },
     "node_modules/fdir": {
       "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+      "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
       "license": "MIT",
       "engines": {
         "node": ">=12.0.0"
@@ -5699,33 +5325,10 @@
         "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/hast-util-to-jsx-runtime": {
-      "version": "2.3.5",
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "^1.0.0",
-        "@types/hast": "^3.0.0",
-        "@types/unist": "^3.0.0",
-        "comma-separated-tokens": "^2.0.0",
-        "devlop": "^1.0.0",
-        "estree-util-is-identifier-name": "^3.0.0",
-        "hast-util-whitespace": "^3.0.0",
-        "mdast-util-mdx-expression": "^2.0.0",
-        "mdast-util-mdx-jsx": "^3.0.0",
-        "mdast-util-mdxjs-esm": "^2.0.0",
-        "property-information": "^7.0.0",
-        "space-separated-tokens": "^2.0.0",
-        "style-to-object": "^1.0.0",
-        "unist-util-position": "^5.0.0",
-        "vfile-message": "^4.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/hast-util-whitespace": {
       "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+      "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
       "license": "MIT",
       "dependencies": {
         "@types/hast": "^3.0.0"
@@ -5754,14 +5357,6 @@
       "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
       "license": "MIT"
     },
-    "node_modules/html-url-attributes": {
-      "version": "3.0.1",
-      "license": "MIT",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/html-void-elements": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
@@ -5774,6 +5369,8 @@
     },
     "node_modules/http-cache-semantics": {
       "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+      "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
       "license": "BSD-2-Clause"
     },
     "node_modules/import-fresh": {
@@ -5802,6 +5399,8 @@
     },
     "node_modules/imurmurhash": {
       "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -5818,10 +5417,6 @@
         "node": "^20.17.0 || >=22.9.0"
       }
     },
-    "node_modules/inline-style-parser": {
-      "version": "0.2.4",
-      "license": "MIT"
-    },
     "node_modules/iron-webcrypto": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
@@ -5831,31 +5426,11 @@
         "url": "https://github.com/sponsors/brc-dd"
       }
     },
-    "node_modules/is-alphabetical": {
-      "version": "2.0.1",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/is-alphanumerical": {
-      "version": "2.0.1",
-      "license": "MIT",
-      "dependencies": {
-        "is-alphabetical": "^2.0.0",
-        "is-decimal": "^2.0.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.16.2",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
-      "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
-      "dev": true,
+    "node_modules/is-core-module": {
+      "version": "2.16.2",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
+      "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
         "hasown": "^2.0.3"
@@ -5867,14 +5442,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-decimal": {
-      "version": "2.0.1",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
     "node_modules/is-docker": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz",
@@ -5900,16 +5467,10 @@
         "node": ">=8"
       }
     },
-    "node_modules/is-hexadecimal": {
-      "version": "2.0.1",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
     "node_modules/is-plain-obj": {
       "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
       "license": "MIT",
       "engines": {
         "node": ">=12"
@@ -6031,9 +5592,9 @@
       "license": "MIT"
     },
     "node_modules/lightningcss": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
-      "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
+      "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
       "license": "MPL-2.0",
       "dependencies": {
         "detect-libc": "^2.0.3"
@@ -6046,23 +5607,23 @@
         "url": "https://opencollective.com/parcel"
       },
       "optionalDependencies": {
-        "lightningcss-android-arm64": "1.33.0",
-        "lightningcss-darwin-arm64": "1.33.0",
-        "lightningcss-darwin-x64": "1.33.0",
-        "lightningcss-freebsd-x64": "1.33.0",
-        "lightningcss-linux-arm-gnueabihf": "1.33.0",
-        "lightningcss-linux-arm64-gnu": "1.33.0",
-        "lightningcss-linux-arm64-musl": "1.33.0",
-        "lightningcss-linux-x64-gnu": "1.33.0",
-        "lightningcss-linux-x64-musl": "1.33.0",
-        "lightningcss-win32-arm64-msvc": "1.33.0",
-        "lightningcss-win32-x64-msvc": "1.33.0"
+        "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"
       }
     },
     "node_modules/lightningcss-android-arm64": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
-      "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
+      "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
       "cpu": [
         "arm64"
       ],
@@ -6080,9 +5641,9 @@
       }
     },
     "node_modules/lightningcss-darwin-arm64": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
-      "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
+      "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
       "cpu": [
         "arm64"
       ],
@@ -6100,9 +5661,9 @@
       }
     },
     "node_modules/lightningcss-darwin-x64": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
-      "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
+      "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
       "cpu": [
         "x64"
       ],
@@ -6120,9 +5681,9 @@
       }
     },
     "node_modules/lightningcss-freebsd-x64": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
-      "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
+      "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
       "cpu": [
         "x64"
       ],
@@ -6140,9 +5701,9 @@
       }
     },
     "node_modules/lightningcss-linux-arm-gnueabihf": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
-      "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
+      "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
       "cpu": [
         "arm"
       ],
@@ -6160,9 +5721,9 @@
       }
     },
     "node_modules/lightningcss-linux-arm64-gnu": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
-      "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
+      "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
       "cpu": [
         "arm64"
       ],
@@ -6180,9 +5741,9 @@
       }
     },
     "node_modules/lightningcss-linux-arm64-musl": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
-      "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
+      "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
       "cpu": [
         "arm64"
       ],
@@ -6200,9 +5761,9 @@
       }
     },
     "node_modules/lightningcss-linux-x64-gnu": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
-      "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
+      "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
       "cpu": [
         "x64"
       ],
@@ -6220,9 +5781,9 @@
       }
     },
     "node_modules/lightningcss-linux-x64-musl": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
-      "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
+      "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
       "cpu": [
         "x64"
       ],
@@ -6240,9 +5801,9 @@
       }
     },
     "node_modules/lightningcss-win32-arm64-msvc": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
-      "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
+      "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
       "cpu": [
         "arm64"
       ],
@@ -6255,539 +5816,109 @@
         "node": ">= 12.0.0"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/lightningcss-win32-x64-msvc": {
-      "version": "1.33.0",
-      "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
-      "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/longest-streak": {
-      "version": "3.1.0",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/lottie-react": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-3.1.2.tgz",
-      "integrity": "sha512-otbTz+Kk1ksYzcWFAlcH8xFGBWkW/hUNEHy6gLvYf7kgEkZxyPT8lXJeBu/5o0xo0cdMwvd/lwkpuXCTSQmJdQ==",
-      "license": "MIT",
-      "dependencies": {
-        "lottie-web": "^5.13.0"
-      },
-      "peerDependencies": {
-        "react": "^18.2.0 || ^19.0.0",
-        "react-dom": "^18.2.0 || ^19.0.0"
-      }
-    },
-    "node_modules/lottie-web": {
-      "version": "5.13.0",
-      "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.13.0.tgz",
-      "integrity": "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==",
-      "license": "MIT"
-    },
-    "node_modules/lru-cache": {
-      "version": "11.5.2",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
-      "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
-      "license": "BlueOak-1.0.0",
-      "engines": {
-        "node": "20 || >=22"
-      }
-    },
-    "node_modules/lucide-react": {
-      "version": "1.46.0",
-      "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.46.0.tgz",
-      "integrity": "sha512-Bv+FZXgZPrxc/NCl1e7JJVQFLdiCxYgxNVhqoV7X0p6I8ADJo8DxBnK1auH0fZz4AmqOJ3jgneL4f1i8LJQRAA==",
-      "license": "ISC",
-      "peerDependencies": {
-        "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
-      }
-    },
-    "node_modules/magic-string": {
-      "version": "0.30.21",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
-      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.5.5"
-      }
-    },
-    "node_modules/magicast": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.5.tgz",
-      "integrity": "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.29.7",
-        "@babel/types": "^7.29.7",
-        "source-map-js": "^1.2.1"
-      }
-    },
-    "node_modules/mdast-util-from-markdown": {
-      "version": "2.0.2",
-      "license": "MIT",
-      "dependencies": {
-        "@types/mdast": "^4.0.0",
-        "@types/unist": "^3.0.0",
-        "decode-named-character-reference": "^1.0.0",
-        "devlop": "^1.0.0",
-        "mdast-util-to-string": "^4.0.0",
-        "micromark": "^4.0.0",
-        "micromark-util-decode-numeric-character-reference": "^2.0.0",
-        "micromark-util-decode-string": "^2.0.0",
-        "micromark-util-normalize-identifier": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0",
-        "unist-util-stringify-position": "^4.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-mdx-expression": {
-      "version": "2.0.1",
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree-jsx": "^1.0.0",
-        "@types/hast": "^3.0.0",
-        "@types/mdast": "^4.0.0",
-        "devlop": "^1.0.0",
-        "mdast-util-from-markdown": "^2.0.0",
-        "mdast-util-to-markdown": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-mdx-jsx": {
-      "version": "3.2.0",
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree-jsx": "^1.0.0",
-        "@types/hast": "^3.0.0",
-        "@types/mdast": "^4.0.0",
-        "@types/unist": "^3.0.0",
-        "ccount": "^2.0.0",
-        "devlop": "^1.1.0",
-        "mdast-util-from-markdown": "^2.0.0",
-        "mdast-util-to-markdown": "^2.0.0",
-        "parse-entities": "^4.0.0",
-        "stringify-entities": "^4.0.0",
-        "unist-util-stringify-position": "^4.0.0",
-        "vfile-message": "^4.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-mdxjs-esm": {
-      "version": "2.0.1",
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree-jsx": "^1.0.0",
-        "@types/hast": "^3.0.0",
-        "@types/mdast": "^4.0.0",
-        "devlop": "^1.0.0",
-        "mdast-util-from-markdown": "^2.0.0",
-        "mdast-util-to-markdown": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-phrasing": {
-      "version": "4.1.0",
-      "license": "MIT",
-      "dependencies": {
-        "@types/mdast": "^4.0.0",
-        "unist-util-is": "^6.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-to-hast": {
-      "version": "13.2.1",
-      "license": "MIT",
-      "dependencies": {
-        "@types/hast": "^3.0.0",
-        "@types/mdast": "^4.0.0",
-        "@ungap/structured-clone": "^1.0.0",
-        "devlop": "^1.0.0",
-        "micromark-util-sanitize-uri": "^2.0.0",
-        "trim-lines": "^3.0.0",
-        "unist-util-position": "^5.0.0",
-        "unist-util-visit": "^5.0.0",
-        "vfile": "^6.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-to-markdown": {
-      "version": "2.1.2",
-      "license": "MIT",
-      "dependencies": {
-        "@types/mdast": "^4.0.0",
-        "@types/unist": "^3.0.0",
-        "longest-streak": "^3.0.0",
-        "mdast-util-phrasing": "^4.0.0",
-        "mdast-util-to-string": "^4.0.0",
-        "micromark-util-classify-character": "^2.0.0",
-        "micromark-util-decode-string": "^2.0.0",
-        "unist-util-visit": "^5.0.0",
-        "zwitch": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-to-string": {
-      "version": "4.0.0",
-      "license": "MIT",
-      "dependencies": {
-        "@types/mdast": "^4.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdn-data": {
-      "version": "2.27.1",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
-      "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
-      "license": "CC0-1.0"
-    },
-    "node_modules/micromark": {
-      "version": "4.0.2",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "@types/debug": "^4.0.0",
-        "debug": "^4.0.0",
-        "decode-named-character-reference": "^1.0.0",
-        "devlop": "^1.0.0",
-        "micromark-core-commonmark": "^2.0.0",
-        "micromark-factory-space": "^2.0.0",
-        "micromark-util-character": "^2.0.0",
-        "micromark-util-chunked": "^2.0.0",
-        "micromark-util-combine-extensions": "^2.0.0",
-        "micromark-util-decode-numeric-character-reference": "^2.0.0",
-        "micromark-util-encode": "^2.0.0",
-        "micromark-util-normalize-identifier": "^2.0.0",
-        "micromark-util-resolve-all": "^2.0.0",
-        "micromark-util-sanitize-uri": "^2.0.0",
-        "micromark-util-subtokenize": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
-      }
-    },
-    "node_modules/micromark-core-commonmark": {
-      "version": "2.0.3",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "decode-named-character-reference": "^1.0.0",
-        "devlop": "^1.0.0",
-        "micromark-factory-destination": "^2.0.0",
-        "micromark-factory-label": "^2.0.0",
-        "micromark-factory-space": "^2.0.0",
-        "micromark-factory-title": "^2.0.0",
-        "micromark-factory-whitespace": "^2.0.0",
-        "micromark-util-character": "^2.0.0",
-        "micromark-util-chunked": "^2.0.0",
-        "micromark-util-classify-character": "^2.0.0",
-        "micromark-util-html-tag-name": "^2.0.0",
-        "micromark-util-normalize-identifier": "^2.0.0",
-        "micromark-util-resolve-all": "^2.0.0",
-        "micromark-util-subtokenize": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
-      }
-    },
-    "node_modules/micromark-factory-destination": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "micromark-util-character": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
-      }
-    },
-    "node_modules/micromark-factory-label": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "devlop": "^1.0.0",
-        "micromark-util-character": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
-      }
-    },
-    "node_modules/micromark-factory-space": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "micromark-util-character": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
-      }
-    },
-    "node_modules/micromark-factory-title": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "micromark-factory-space": "^2.0.0",
-        "micromark-util-character": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
-      }
-    },
-    "node_modules/micromark-factory-whitespace": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "micromark-factory-space": "^2.0.0",
-        "micromark-util-character": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
-      }
-    },
-    "node_modules/micromark-util-character": {
-      "version": "2.1.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/micromark-util-chunked": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
+    "node_modules/lightningcss-win32-x64-msvc": {
+      "version": "1.32.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
+      "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
+      "cpu": [
+        "x64"
       ],
-      "license": "MIT",
-      "dependencies": {
-        "micromark-util-symbol": "^2.0.0"
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/micromark-util-classify-character": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
+    "node_modules/lottie-react": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-3.1.2.tgz",
+      "integrity": "sha512-otbTz+Kk1ksYzcWFAlcH8xFGBWkW/hUNEHy6gLvYf7kgEkZxyPT8lXJeBu/5o0xo0cdMwvd/lwkpuXCTSQmJdQ==",
       "license": "MIT",
       "dependencies": {
-        "micromark-util-character": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
+        "lottie-web": "^5.13.0"
+      },
+      "peerDependencies": {
+        "react": "^18.2.0 || ^19.0.0",
+        "react-dom": "^18.2.0 || ^19.0.0"
       }
     },
-    "node_modules/micromark-util-combine-extensions": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
+    "node_modules/lottie-web": {
+      "version": "5.13.0",
+      "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.13.0.tgz",
+      "integrity": "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==",
+      "license": "MIT"
+    },
+    "node_modules/lru-cache": {
+      "version": "11.5.2",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
+      "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": "20 || >=22"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.21",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
       "license": "MIT",
       "dependencies": {
-        "micromark-util-chunked": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
+        "@jridgewell/sourcemap-codec": "^1.5.5"
       }
     },
-    "node_modules/micromark-util-decode-numeric-character-reference": {
-      "version": "2.0.2",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
+    "node_modules/magicast": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.5.tgz",
+      "integrity": "sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==",
       "license": "MIT",
       "dependencies": {
-        "micromark-util-symbol": "^2.0.0"
+        "@babel/parser": "^7.29.7",
+        "@babel/types": "^7.29.7",
+        "source-map-js": "^1.2.1"
       }
     },
-    "node_modules/micromark-util-decode-string": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
+    "node_modules/mdast-util-to-hast": {
+      "version": "13.2.1",
+      "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+      "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
       "license": "MIT",
       "dependencies": {
-        "decode-named-character-reference": "^1.0.0",
-        "micromark-util-character": "^2.0.0",
-        "micromark-util-decode-numeric-character-reference": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0"
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "@ungap/structured-clone": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "trim-lines": "^3.0.0",
+        "unist-util-position": "^5.0.0",
+        "unist-util-visit": "^5.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/micromark-util-encode": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT"
-    },
-    "node_modules/micromark-util-html-tag-name": {
-      "version": "2.0.1",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT"
+    "node_modules/mdn-data": {
+      "version": "2.27.1",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
+      "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+      "license": "CC0-1.0"
     },
-    "node_modules/micromark-util-normalize-identifier": {
-      "version": "2.0.1",
+    "node_modules/micromark-util-character": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+      "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
       "funding": [
         {
           "type": "GitHub Sponsors",
@@ -6800,11 +5931,14 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "micromark-util-symbol": "^2.0.0"
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       }
     },
-    "node_modules/micromark-util-resolve-all": {
+    "node_modules/micromark-util-encode": {
       "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+      "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
       "funding": [
         {
           "type": "GitHub Sponsors",
@@ -6815,13 +5949,12 @@
           "url": "https://opencollective.com/unified"
         }
       ],
-      "license": "MIT",
-      "dependencies": {
-        "micromark-util-types": "^2.0.0"
-      }
+      "license": "MIT"
     },
     "node_modules/micromark-util-sanitize-uri": {
       "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+      "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
       "funding": [
         {
           "type": "GitHub Sponsors",
@@ -6839,28 +5972,10 @@
         "micromark-util-symbol": "^2.0.0"
       }
     },
-    "node_modules/micromark-util-subtokenize": {
-      "version": "2.1.0",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "devlop": "^1.0.0",
-        "micromark-util-chunked": "^2.0.0",
-        "micromark-util-symbol": "^2.0.0",
-        "micromark-util-types": "^2.0.0"
-      }
-    },
     "node_modules/micromark-util-symbol": {
       "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+      "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
       "funding": [
         {
           "type": "GitHub Sponsors",
@@ -6875,6 +5990,8 @@
     },
     "node_modules/micromark-util-types": {
       "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+      "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
       "funding": [
         {
           "type": "GitHub Sponsors",
@@ -6937,6 +6054,8 @@
     },
     "node_modules/ms": {
       "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "license": "MIT"
     },
     "node_modules/nanoid": {
@@ -7075,6 +6194,8 @@
     },
     "node_modules/npm-normalize-package-bin": {
       "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
+      "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==",
       "dev": true,
       "license": "ISC",
       "engines": {
@@ -7231,27 +6352,6 @@
       "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==",
       "license": "MIT"
     },
-    "node_modules/parse-entities": {
-      "version": "4.0.2",
-      "license": "MIT",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "character-entities-legacy": "^3.0.0",
-        "character-reference-invalid": "^2.0.0",
-        "decode-named-character-reference": "^1.0.0",
-        "is-alphanumerical": "^2.0.0",
-        "is-decimal": "^2.0.0",
-        "is-hexadecimal": "^2.0.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/parse-entities/node_modules/@types/unist": {
-      "version": "2.0.11",
-      "license": "MIT"
-    },
     "node_modules/path-expression-matcher": {
       "version": "1.6.2",
       "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.6.2.tgz",
@@ -7293,10 +6393,14 @@
     },
     "node_modules/piccolore": {
       "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz",
+      "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==",
       "license": "ISC"
     },
     "node_modules/picocolors": {
       "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
       "license": "ISC"
     },
     "node_modules/picomatch": {
@@ -7341,6 +6445,8 @@
     },
     "node_modules/postcss-selector-parser": {
       "version": "6.0.10",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7493,7 +6599,9 @@
       }
     },
     "node_modules/property-information": {
-      "version": "7.0.0",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
+      "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -7527,31 +6635,6 @@
         "react": "^19.3.0"
       }
     },
-    "node_modules/react-markdown": {
-      "version": "10.1.0",
-      "license": "MIT",
-      "dependencies": {
-        "@types/hast": "^3.0.0",
-        "@types/mdast": "^4.0.0",
-        "devlop": "^1.0.0",
-        "hast-util-to-jsx-runtime": "^2.0.0",
-        "html-url-attributes": "^3.0.0",
-        "mdast-util-to-hast": "^13.0.0",
-        "remark-parse": "^11.0.0",
-        "remark-rehype": "^11.0.0",
-        "unified": "^11.0.0",
-        "unist-util-visit": "^5.0.0",
-        "vfile": "^6.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      },
-      "peerDependencies": {
-        "@types/react": ">=18",
-        "react": ">=18"
-      }
-    },
     "node_modules/react-refresh": {
       "version": "0.18.0",
       "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
@@ -7632,6 +6715,8 @@
     },
     "node_modules/read-cmd-shim": {
       "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz",
+      "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==",
       "dev": true,
       "license": "ISC",
       "engines": {
@@ -7675,35 +6760,6 @@
       "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
       "license": "MIT"
     },
-    "node_modules/remark-parse": {
-      "version": "11.0.0",
-      "license": "MIT",
-      "dependencies": {
-        "@types/mdast": "^4.0.0",
-        "mdast-util-from-markdown": "^2.0.0",
-        "micromark-util-types": "^2.0.0",
-        "unified": "^11.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/remark-rehype": {
-      "version": "11.1.2",
-      "license": "MIT",
-      "dependencies": {
-        "@types/hast": "^3.0.0",
-        "@types/mdast": "^4.0.0",
-        "mdast-util-to-hast": "^13.0.0",
-        "unified": "^11.0.0",
-        "vfile": "^6.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -7714,10 +6770,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/reselect": {
-      "version": "5.1.1",
-      "license": "MIT"
-    },
     "node_modules/resolve": {
       "version": "1.22.12",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
@@ -7953,6 +7005,8 @@
     },
     "node_modules/signal-exit": {
       "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
       "dev": true,
       "license": "ISC",
       "engines": {
@@ -8001,6 +7055,8 @@
     },
     "node_modules/source-map-js": {
       "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
       "license": "BSD-3-Clause",
       "engines": {
         "node": ">=0.10.0"
@@ -8008,6 +7064,8 @@
     },
     "node_modules/space-separated-tokens": {
       "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+      "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -8056,6 +7114,8 @@
     },
     "node_modules/stringify-entities": {
       "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+      "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
       "license": "MIT",
       "dependencies": {
         "character-entities-html4": "^2.0.0",
@@ -8096,19 +7156,12 @@
       "funding": [
         {
           "type": "github",
-          "url": "https://github.com/sponsors/NaturalIntelligence"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "anynum": "^1.0.1"
-      }
-    },
-    "node_modules/style-to-object": {
-      "version": "1.0.9",
+          "url": "https://github.com/sponsors/NaturalIntelligence"
+        }
+      ],
       "license": "MIT",
       "dependencies": {
-        "inline-style-parser": "0.2.4"
+        "anynum": "^1.0.1"
       }
     },
     "node_modules/suf-log": {
@@ -8168,10 +7221,6 @@
         "node": ">=16"
       }
     },
-    "node_modules/tabbable": {
-      "version": "6.3.0",
-      "license": "MIT"
-    },
     "node_modules/tailwind-merge": {
       "version": "3.7.0",
       "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.7.0.tgz",
@@ -8190,6 +7239,8 @@
     },
     "node_modules/tailwindcss-animate": {
       "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
+      "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
       "license": "MIT",
       "peerDependencies": {
         "tailwindcss": ">=3.0.0 || insiders"
@@ -8267,6 +7318,8 @@
     },
     "node_modules/trim-lines": {
       "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+      "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -8275,6 +7328,8 @@
     },
     "node_modules/trough": {
       "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+      "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
       "license": "MIT",
       "funding": {
         "type": "github",
@@ -8283,10 +7338,14 @@
     },
     "node_modules/tslib": {
       "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
       "license": "0BSD"
     },
     "node_modules/type-fest": {
       "version": "4.41.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+      "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
       "dev": true,
       "license": "(MIT OR CC0-1.0)",
       "engines": {
@@ -8303,7 +7362,9 @@
       "license": "MIT"
     },
     "node_modules/ultrahtml": {
-      "version": "1.6.0",
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.7.0.tgz",
+      "integrity": "sha512-2xRd0VHoAQE4M+vF/DvFFB7pUV0ZxTW1TLi7lHQWnF/Sb5TPeEUV/l+hxcNnGO00ZXGnR0voCMmYRKQf+rvJ2g==",
       "license": "MIT"
     },
     "node_modules/uncrypto": {
@@ -8330,6 +7391,8 @@
     },
     "node_modules/unified": {
       "version": "11.0.5",
+      "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+      "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
       "license": "MIT",
       "dependencies": {
         "@types/unist": "^3.0.0",
@@ -8366,7 +7429,9 @@
       }
     },
     "node_modules/unist-util-is": {
-      "version": "6.0.0",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+      "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
       "license": "MIT",
       "dependencies": {
         "@types/unist": "^3.0.0"
@@ -8378,6 +7443,8 @@
     },
     "node_modules/unist-util-position": {
       "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+      "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
       "license": "MIT",
       "dependencies": {
         "@types/unist": "^3.0.0"
@@ -8389,6 +7456,8 @@
     },
     "node_modules/unist-util-stringify-position": {
       "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+      "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
       "license": "MIT",
       "dependencies": {
         "@types/unist": "^3.0.0"
@@ -8399,7 +7468,9 @@
       }
     },
     "node_modules/unist-util-visit": {
-      "version": "5.0.0",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+      "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
       "license": "MIT",
       "dependencies": {
         "@types/unist": "^3.0.0",
@@ -8413,6 +7484,8 @@
     },
     "node_modules/unist-util-visit-parents": {
       "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+      "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
       "license": "MIT",
       "dependencies": {
         "@types/unist": "^3.0.0",
@@ -8592,15 +7665,10 @@
         }
       }
     },
-    "node_modules/use-sync-external-store": {
-      "version": "1.6.0",
-      "license": "MIT",
-      "peerDependencies": {
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
-      }
-    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
       "dev": true,
       "license": "MIT"
     },
@@ -8616,6 +7684,8 @@
     },
     "node_modules/vfile": {
       "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+      "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
       "license": "MIT",
       "dependencies": {
         "@types/unist": "^3.0.0",
@@ -8627,7 +7697,9 @@
       }
     },
     "node_modules/vfile-message": {
-      "version": "4.0.2",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+      "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
       "license": "MIT",
       "dependencies": {
         "@types/unist": "^3.0.0",
@@ -8715,6 +7787,255 @@
         }
       }
     },
+    "node_modules/vite/node_modules/lightningcss": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz",
+      "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==",
+      "license": "MPL-2.0",
+      "dependencies": {
+        "detect-libc": "^2.0.3"
+      },
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      },
+      "optionalDependencies": {
+        "lightningcss-android-arm64": "1.33.0",
+        "lightningcss-darwin-arm64": "1.33.0",
+        "lightningcss-darwin-x64": "1.33.0",
+        "lightningcss-freebsd-x64": "1.33.0",
+        "lightningcss-linux-arm-gnueabihf": "1.33.0",
+        "lightningcss-linux-arm64-gnu": "1.33.0",
+        "lightningcss-linux-arm64-musl": "1.33.0",
+        "lightningcss-linux-x64-gnu": "1.33.0",
+        "lightningcss-linux-x64-musl": "1.33.0",
+        "lightningcss-win32-arm64-msvc": "1.33.0",
+        "lightningcss-win32-x64-msvc": "1.33.0"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-android-arm64": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz",
+      "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-darwin-arm64": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz",
+      "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-darwin-x64": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz",
+      "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-freebsd-x64": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz",
+      "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-linux-arm-gnueabihf": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz",
+      "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-linux-arm64-gnu": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz",
+      "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-linux-arm64-musl": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz",
+      "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-linux-x64-gnu": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz",
+      "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-linux-x64-musl": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz",
+      "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-win32-arm64-msvc": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz",
+      "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/vite/node_modules/lightningcss-win32-x64-msvc": {
+      "version": "1.33.0",
+      "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz",
+      "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
     "node_modules/vitefu": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz",
@@ -8784,6 +8105,8 @@
     },
     "node_modules/write-file-atomic": {
       "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+      "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -8925,6 +8248,8 @@
     },
     "node_modules/zwitch": {
       "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+      "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
       "license": "MIT",
       "funding": {
         "type": "github",
diff --git a/package.json b/package.json
index 6010de1d..4826b9d2 100644
--- a/package.json
+++ b/package.json
@@ -10,17 +10,16 @@
     "format": "prettier --write .",
     "format:check": "prettier --check .",
     "lint": "",
-    "cspell": "cspell \"**\""
+    "cspell": "cspell \"**\"",
+    "check:links": "python3 scripts/check_links.py dist"
   },
   "dependencies": {
     "@astrojs/mdx": "^8.0.1",
     "@astrojs/react": "^6.0.5",
     "@astrojs/rss": "^4.0.19",
     "@astrojs/sitemap": "^3.7.4",
-    "@base-ui-components/react": "^1.0.0-rc.0",
     "@lavamoat/preinstall-always-fail": "^3.0.0",
     "@phosphor-icons/react": "^2.1.10",
-    "@radix-ui/react-accordion": "^1.2.20",
     "@radix-ui/react-dialog": "^1.1.23",
     "@radix-ui/react-slot": "^1.2.4",
     "@tailwindcss/vite": "^4.3.3",
@@ -30,10 +29,8 @@
     "class-variance-authority": "^0.7.1",
     "clsx": "^2.1.1",
     "lottie-react": "^3.1.2",
-    "lucide-react": "^1.45.0",
     "react": "^19.3.0",
     "react-dom": "^19.3.0",
-    "react-markdown": "^10.1.0",
     "sharp": "^0.35.4",
     "tailwind-merge": "^3.7.0",
     "tailwindcss": "^4.0.3",
diff --git a/public/CNAME b/public/CNAME
deleted file mode 100644
index 30d09e9d..00000000
--- a/public/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-shorebird.dev
\ No newline at end of file
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
index e9f7ec53..e49c4db1 100644
Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ
diff --git a/public/blog/og/1.jpg b/public/blog/og/1.jpg
new file mode 100644
index 00000000..86d2c72c
Binary files /dev/null and b/public/blog/og/1.jpg differ
diff --git a/public/blog/og/2025-year-in-review.jpg b/public/blog/og/2025-year-in-review.jpg
new file mode 100644
index 00000000..75589073
Binary files /dev/null and b/public/blog/og/2025-year-in-review.jpg differ
diff --git a/public/blog/og/advanced-permissions.jpg b/public/blog/og/advanced-permissions.jpg
new file mode 100644
index 00000000..33889554
Binary files /dev/null and b/public/blog/og/advanced-permissions.jpg differ
diff --git a/public/blog/og/ai-intent-cross-platform-app-development.jpg b/public/blog/og/ai-intent-cross-platform-app-development.jpg
new file mode 100644
index 00000000..bc5bc336
Binary files /dev/null and b/public/blog/og/ai-intent-cross-platform-app-development.jpg differ
diff --git a/public/blog/og/brand-refresh.jpg b/public/blog/og/brand-refresh.jpg
new file mode 100644
index 00000000..4c660ee9
Binary files /dev/null and b/public/blog/og/brand-refresh.jpg differ
diff --git a/public/blog/og/building-good-software.jpg b/public/blog/og/building-good-software.jpg
new file mode 100644
index 00000000..c11ed0f8
Binary files /dev/null and b/public/blog/og/building-good-software.jpg differ
diff --git a/public/blog/og/buy-dont-build.jpg b/public/blog/og/buy-dont-build.jpg
new file mode 100644
index 00000000..185aaa44
Binary files /dev/null and b/public/blog/og/buy-dont-build.jpg differ
diff --git a/public/blog/og/characteristics-portable-software.jpg b/public/blog/og/characteristics-portable-software.jpg
new file mode 100644
index 00000000..ace5f77a
Binary files /dev/null and b/public/blog/og/characteristics-portable-software.jpg differ
diff --git a/public/blog/og/cloud-infra-improvements.jpg b/public/blog/og/cloud-infra-improvements.jpg
new file mode 100644
index 00000000..276050e3
Binary files /dev/null and b/public/blog/og/cloud-infra-improvements.jpg differ
diff --git a/public/blog/og/code-push-makes-your-app-more-secure-not-less.jpg b/public/blog/og/code-push-makes-your-app-more-secure-not-less.jpg
new file mode 100644
index 00000000..c7125782
Binary files /dev/null and b/public/blog/og/code-push-makes-your-app-more-secure-not-less.jpg differ
diff --git a/public/blog/og/custom-tracks.jpg b/public/blog/og/custom-tracks.jpg
new file mode 100644
index 00000000..549f29e9
Binary files /dev/null and b/public/blog/og/custom-tracks.jpg differ
diff --git a/public/blog/og/dart-3-5-0.jpg b/public/blog/og/dart-3-5-0.jpg
new file mode 100644
index 00000000..6f0730e8
Binary files /dev/null and b/public/blog/og/dart-3-5-0.jpg differ
diff --git a/public/blog/og/dart-macros.jpg b/public/blog/og/dart-macros.jpg
new file mode 100644
index 00000000..8fae4dcf
Binary files /dev/null and b/public/blog/og/dart-macros.jpg differ
diff --git a/public/blog/og/desktop-in-production.jpg b/public/blog/og/desktop-in-production.jpg
new file mode 100644
index 00000000..410a44a6
Binary files /dev/null and b/public/blog/og/desktop-in-production.jpg differ
diff --git a/public/blog/og/development-workflow.jpg b/public/blog/og/development-workflow.jpg
new file mode 100644
index 00000000..0579528f
Binary files /dev/null and b/public/blog/og/development-workflow.jpg differ
diff --git a/public/blog/og/exploring-shorebird-samples.jpg b/public/blog/og/exploring-shorebird-samples.jpg
new file mode 100644
index 00000000..7713ff6c
Binary files /dev/null and b/public/blog/og/exploring-shorebird-samples.jpg differ
diff --git a/public/blog/og/flutter-3-32-release.jpg b/public/blog/og/flutter-3-32-release.jpg
new file mode 100644
index 00000000..79bc957c
Binary files /dev/null and b/public/blog/og/flutter-3-32-release.jpg differ
diff --git a/public/blog/og/flutter-jobs.jpg b/public/blog/og/flutter-jobs.jpg
new file mode 100644
index 00000000..f2a264bf
Binary files /dev/null and b/public/blog/og/flutter-jobs.jpg differ
diff --git a/public/blog/og/flutter-not-dead.jpg b/public/blog/og/flutter-not-dead.jpg
new file mode 100644
index 00000000..a5719c29
Binary files /dev/null and b/public/blog/og/flutter-not-dead.jpg differ
diff --git a/public/blog/og/flutter-vs-dotnet-maui-architecture-tooling-deployment.jpg b/public/blog/og/flutter-vs-dotnet-maui-architecture-tooling-deployment.jpg
new file mode 100644
index 00000000..a0514e96
Binary files /dev/null and b/public/blog/og/flutter-vs-dotnet-maui-architecture-tooling-deployment.jpg differ
diff --git a/public/blog/og/flutter-vs-kotlin-multiplatform.jpg b/public/blog/og/flutter-vs-kotlin-multiplatform.jpg
new file mode 100644
index 00000000..9546efc1
Binary files /dev/null and b/public/blog/og/flutter-vs-kotlin-multiplatform.jpg differ
diff --git a/public/blog/og/flutter-vs-react-native.jpg b/public/blog/og/flutter-vs-react-native.jpg
new file mode 100644
index 00000000..61b883c6
Binary files /dev/null and b/public/blog/og/flutter-vs-react-native.jpg differ
diff --git a/public/blog/og/flutter-web-is-misunderstood.jpg b/public/blog/og/flutter-web-is-misunderstood.jpg
new file mode 100644
index 00000000..66d0dfba
Binary files /dev/null and b/public/blog/og/flutter-web-is-misunderstood.jpg differ
diff --git a/public/blog/og/flutterconusa-2025-sponsor.jpg b/public/blog/og/flutterconusa-2025-sponsor.jpg
new file mode 100644
index 00000000..a8bc0bbd
Binary files /dev/null and b/public/blog/og/flutterconusa-2025-sponsor.jpg differ
diff --git a/public/blog/og/how-many-patches.jpg b/public/blog/og/how-many-patches.jpg
new file mode 100644
index 00000000..4f2221e2
Binary files /dev/null and b/public/blog/og/how-many-patches.jpg differ
diff --git a/public/blog/og/how-we-built-code-push.jpg b/public/blog/og/how-we-built-code-push.jpg
new file mode 100644
index 00000000..b339674e
Binary files /dev/null and b/public/blog/og/how-we-built-code-push.jpg differ
diff --git a/public/blog/og/improved-patch-delivery.jpg b/public/blog/og/improved-patch-delivery.jpg
new file mode 100644
index 00000000..799e4b59
Binary files /dev/null and b/public/blog/og/improved-patch-delivery.jpg differ
diff --git a/public/blog/og/introducing-mission-control.jpg b/public/blog/og/introducing-mission-control.jpg
new file mode 100644
index 00000000..ec337738
Binary files /dev/null and b/public/blog/og/introducing-mission-control.jpg differ
diff --git a/public/blog/og/introducing-shorebird-ci.jpg b/public/blog/og/introducing-shorebird-ci.jpg
new file mode 100644
index 00000000..57fd8050
Binary files /dev/null and b/public/blog/og/introducing-shorebird-ci.jpg differ
diff --git a/public/blog/og/introducing-shorebirds-upgraded-auth-service.jpg b/public/blog/og/introducing-shorebirds-upgraded-auth-service.jpg
new file mode 100644
index 00000000..eae72d76
Binary files /dev/null and b/public/blog/og/introducing-shorebirds-upgraded-auth-service.jpg differ
diff --git a/public/blog/og/ios-beta.jpg b/public/blog/og/ios-beta.jpg
new file mode 100644
index 00000000..d40c4802
Binary files /dev/null and b/public/blog/og/ios-beta.jpg differ
diff --git a/public/blog/og/keep-your-flutter-version-current.jpg b/public/blog/og/keep-your-flutter-version-current.jpg
new file mode 100644
index 00000000..60215220
Binary files /dev/null and b/public/blog/og/keep-your-flutter-version-current.jpg differ
diff --git a/public/blog/og/macos-beta.jpg b/public/blog/og/macos-beta.jpg
new file mode 100644
index 00000000..42af468a
Binary files /dev/null and b/public/blog/og/macos-beta.jpg differ
diff --git a/public/blog/og/making-the-shorebird-cli-agentic.jpg b/public/blog/og/making-the-shorebird-cli-agentic.jpg
new file mode 100644
index 00000000..d94b9ddd
Binary files /dev/null and b/public/blog/og/making-the-shorebird-cli-agentic.jpg differ
diff --git a/public/blog/og/manual-control-of-your-shorebird-updates.jpg b/public/blog/og/manual-control-of-your-shorebird-updates.jpg
new file mode 100644
index 00000000..a95ead26
Binary files /dev/null and b/public/blog/og/manual-control-of-your-shorebird-updates.jpg differ
diff --git a/public/blog/og/meet-our-first-shorebird-community-ambassadors.jpg b/public/blog/og/meet-our-first-shorebird-community-ambassadors.jpg
new file mode 100644
index 00000000..0fdde178
Binary files /dev/null and b/public/blog/og/meet-our-first-shorebird-community-ambassadors.jpg differ
diff --git a/public/blog/og/migrate-to-shorebird-api-keys.jpg b/public/blog/og/migrate-to-shorebird-api-keys.jpg
new file mode 100644
index 00000000..499dd56a
Binary files /dev/null and b/public/blog/og/migrate-to-shorebird-api-keys.jpg differ
diff --git a/public/blog/og/obfuscation-on-ios.jpg b/public/blog/og/obfuscation-on-ios.jpg
new file mode 100644
index 00000000..ef1ff07a
Binary files /dev/null and b/public/blog/og/obfuscation-on-ios.jpg differ
diff --git a/public/blog/og/organizations.jpg b/public/blog/og/organizations.jpg
new file mode 100644
index 00000000..c0f54a3c
Binary files /dev/null and b/public/blog/og/organizations.jpg differ
diff --git a/public/blog/og/patch-rollback.jpg b/public/blog/og/patch-rollback.jpg
new file mode 100644
index 00000000..6d203542
Binary files /dev/null and b/public/blog/og/patch-rollback.jpg differ
diff --git a/public/blog/og/patch-signing-beta.jpg b/public/blog/og/patch-signing-beta.jpg
new file mode 100644
index 00000000..a9c66969
Binary files /dev/null and b/public/blog/og/patch-signing-beta.jpg differ
diff --git a/public/blog/og/portability-is-the-new-productivity.jpg b/public/blog/og/portability-is-the-new-productivity.jpg
new file mode 100644
index 00000000..6bc4bb1a
Binary files /dev/null and b/public/blog/og/portability-is-the-new-productivity.jpg differ
diff --git a/public/blog/og/portable-software-ai-era.jpg b/public/blog/og/portable-software-ai-era.jpg
new file mode 100644
index 00000000..3edaa560
Binary files /dev/null and b/public/blog/og/portable-software-ai-era.jpg differ
diff --git a/public/blog/og/predict-an-outage.jpg b/public/blog/og/predict-an-outage.jpg
new file mode 100644
index 00000000..480f69ae
Binary files /dev/null and b/public/blog/og/predict-an-outage.jpg differ
diff --git a/public/blog/og/react-native-vs-flutter-for-enterprise-apps.jpg b/public/blog/og/react-native-vs-flutter-for-enterprise-apps.jpg
new file mode 100644
index 00000000..95787861
Binary files /dev/null and b/public/blog/og/react-native-vs-flutter-for-enterprise-apps.jpg differ
diff --git a/public/blog/og/rolling-back-patches-reflection.jpg b/public/blog/og/rolling-back-patches-reflection.jpg
new file mode 100644
index 00000000..382241c6
Binary files /dev/null and b/public/blog/og/rolling-back-patches-reflection.jpg differ
diff --git a/public/blog/og/say-hello-to-abhishek-doshi-shorebirds-devrel-engineer.jpg b/public/blog/og/say-hello-to-abhishek-doshi-shorebirds-devrel-engineer.jpg
new file mode 100644
index 00000000..f75e9b64
Binary files /dev/null and b/public/blog/og/say-hello-to-abhishek-doshi-shorebirds-devrel-engineer.jpg differ
diff --git a/public/blog/og/seed-round.jpg b/public/blog/og/seed-round.jpg
new file mode 100644
index 00000000..70a0e0ba
Binary files /dev/null and b/public/blog/og/seed-round.jpg differ
diff --git a/public/blog/og/shorebird-code-push-v2.jpg b/public/blog/og/shorebird-code-push-v2.jpg
new file mode 100644
index 00000000..03536948
Binary files /dev/null and b/public/blog/og/shorebird-code-push-v2.jpg differ
diff --git a/public/blog/og/shorebird-codemagic.jpg b/public/blog/og/shorebird-codemagic.jpg
new file mode 100644
index 00000000..a0fb3752
Binary files /dev/null and b/public/blog/og/shorebird-codemagic.jpg differ
diff --git a/public/blog/og/shorebird-create.jpg b/public/blog/og/shorebird-create.jpg
new file mode 100644
index 00000000..32ece472
Binary files /dev/null and b/public/blog/og/shorebird-create.jpg differ
diff --git a/public/blog/og/shorebird-is-growing.jpg b/public/blog/og/shorebird-is-growing.jpg
new file mode 100644
index 00000000..6171d0e4
Binary files /dev/null and b/public/blog/og/shorebird-is-growing.jpg differ
diff --git a/public/blog/og/shorebirds-community-ambassador-program.jpg b/public/blog/og/shorebirds-community-ambassador-program.jpg
new file mode 100644
index 00000000..84faf696
Binary files /dev/null and b/public/blog/og/shorebirds-community-ambassador-program.jpg differ
diff --git a/public/blog/og/shorebirds-ongoing-performance-work.jpg b/public/blog/og/shorebirds-ongoing-performance-work.jpg
new file mode 100644
index 00000000..750ba3a5
Binary files /dev/null and b/public/blog/og/shorebirds-ongoing-performance-work.jpg differ
diff --git a/public/blog/og/simplified-pricing.jpg b/public/blog/og/simplified-pricing.jpg
new file mode 100644
index 00000000..6b65850c
Binary files /dev/null and b/public/blog/og/simplified-pricing.jpg differ
diff --git a/public/blog/og/the-next-phase-of-shorebird-ci.jpg b/public/blog/og/the-next-phase-of-shorebird-ci.jpg
new file mode 100644
index 00000000..2a9a4ecc
Binary files /dev/null and b/public/blog/og/the-next-phase-of-shorebird-ci.jpg differ
diff --git a/public/blog/og/tom-joins-shorebird.jpg b/public/blog/og/tom-joins-shorebird.jpg
new file mode 100644
index 00000000..35c1cd03
Binary files /dev/null and b/public/blog/og/tom-joins-shorebird.jpg differ
diff --git a/public/blog/og/tracks-percentage-rollouts-a-b-testing.jpg b/public/blog/og/tracks-percentage-rollouts-a-b-testing.jpg
new file mode 100644
index 00000000..3d812c85
Binary files /dev/null and b/public/blog/og/tracks-percentage-rollouts-a-b-testing.jpg differ
diff --git a/public/blog/og/viewing-logs.jpg b/public/blog/og/viewing-logs.jpg
new file mode 100644
index 00000000..d25b5840
Binary files /dev/null and b/public/blog/og/viewing-logs.jpg differ
diff --git a/public/blog/og/we-tried-to-save-the-web.jpg b/public/blog/og/we-tried-to-save-the-web.jpg
new file mode 100644
index 00000000..75deece1
Binary files /dev/null and b/public/blog/og/we-tried-to-save-the-web.jpg differ
diff --git a/public/blog/og/webview-vs-server-driven-ui-vs-code-push.jpg b/public/blog/og/webview-vs-server-driven-ui-vs-code-push.jpg
new file mode 100644
index 00000000..87671429
Binary files /dev/null and b/public/blog/og/webview-vs-server-driven-ui-vs-code-push.jpg differ
diff --git a/public/blog/og/wesley-intro-post.jpg b/public/blog/og/wesley-intro-post.jpg
new file mode 100644
index 00000000..d7ad78c0
Binary files /dev/null and b/public/blog/og/wesley-intro-post.jpg differ
diff --git a/public/blog/og/what-happens-when-a-patch-fails.jpg b/public/blog/og/what-happens-when-a-patch-fails.jpg
new file mode 100644
index 00000000..3868f7c8
Binary files /dev/null and b/public/blog/og/what-happens-when-a-patch-fails.jpg differ
diff --git a/public/blog/og/why-dawn-joined.jpg b/public/blog/og/why-dawn-joined.jpg
new file mode 100644
index 00000000..35c1cd03
Binary files /dev/null and b/public/blog/og/why-dawn-joined.jpg differ
diff --git a/public/blog/og/why-flutter-optimizes-for-the-ceiling-not-the-floor.jpg b/public/blog/og/why-flutter-optimizes-for-the-ceiling-not-the-floor.jpg
new file mode 100644
index 00000000..8bd3ca60
Binary files /dev/null and b/public/blog/og/why-flutter-optimizes-for-the-ceiling-not-the-floor.jpg differ
diff --git a/public/blog/og/why-you-need-to-deploy-shorebird-on-day-1.jpg b/public/blog/og/why-you-need-to-deploy-shorebird-on-day-1.jpg
new file mode 100644
index 00000000..f3cb890f
Binary files /dev/null and b/public/blog/og/why-you-need-to-deploy-shorebird-on-day-1.jpg differ
diff --git a/public/blog/og/windows-beta.jpg b/public/blog/og/windows-beta.jpg
new file mode 100644
index 00000000..bd3cad97
Binary files /dev/null and b/public/blog/og/windows-beta.jpg differ
diff --git a/public/blog/og/workshops.jpg b/public/blog/og/workshops.jpg
new file mode 100644
index 00000000..bc465f60
Binary files /dev/null and b/public/blog/og/workshops.jpg differ
diff --git a/public/blog/og/yearly-plans.jpg b/public/blog/og/yearly-plans.jpg
new file mode 100644
index 00000000..42af468a
Binary files /dev/null and b/public/blog/og/yearly-plans.jpg differ
diff --git a/public/blog/open-graph.png b/public/blog/open-graph.png
deleted file mode 100644
index fd61fb51..00000000
Binary files a/public/blog/open-graph.png and /dev/null differ
diff --git a/public/favicon.png b/public/favicon.png
new file mode 100644
index 00000000..dc3a64f8
Binary files /dev/null and b/public/favicon.png differ
diff --git a/public/fonts/GeneralSans/GeneralSans-Medium.woff2 b/public/fonts/GeneralSans/GeneralSans-Medium.woff2
new file mode 100644
index 00000000..7b58b3fd
Binary files /dev/null and b/public/fonts/GeneralSans/GeneralSans-Medium.woff2 differ
diff --git a/public/fonts/GeneralSans/GeneralSans-Semibold.woff2 b/public/fonts/GeneralSans/GeneralSans-Semibold.woff2
new file mode 100644
index 00000000..b38df16d
Binary files /dev/null and b/public/fonts/GeneralSans/GeneralSans-Semibold.woff2 differ
diff --git a/public/guides/shorebird-code-push-guide.pdf b/public/guides/shorebird-code-push-guide.pdf
new file mode 100644
index 00000000..c68d6681
Binary files /dev/null and b/public/guides/shorebird-code-push-guide.pdf differ
diff --git a/public/legal/Code Town Inc - Data Processing Agreement (DPA).pdf b/public/legal/Code Town Inc - Data Processing Agreement (DPA).pdf
new file mode 100644
index 00000000..03c011fc
Binary files /dev/null and b/public/legal/Code Town Inc - Data Processing Agreement (DPA).pdf differ
diff --git a/public/legal/Terms of Service - Shorebird CI.pdf b/public/legal/Terms of Service - Shorebird CI.pdf
new file mode 100644
index 00000000..4439d4ee
Binary files /dev/null and b/public/legal/Terms of Service - Shorebird CI.pdf differ
diff --git a/public/legal/Terms of Service - Shorebird Code Push.pdf b/public/legal/Terms of Service - Shorebird Code Push.pdf
new file mode 100644
index 00000000..f0824afa
Binary files /dev/null and b/public/legal/Terms of Service - Shorebird Code Push.pdf differ
diff --git a/public/open-graph.jpg b/public/open-graph.jpg
new file mode 100644
index 00000000..ff91fc86
Binary files /dev/null and b/public/open-graph.jpg differ
diff --git a/public/open-graph.png b/public/open-graph.png
deleted file mode 100644
index 4d231e40..00000000
Binary files a/public/open-graph.png and /dev/null differ
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 00000000..e7a17d1a
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: https://shorebird.dev/sitemap-index.xml
diff --git a/public/shorebird-logo-wordmark.png b/public/shorebird-logo-wordmark.png
new file mode 100644
index 00000000..b595164b
Binary files /dev/null and b/public/shorebird-logo-wordmark.png differ
diff --git a/public/success-stories/open-graph.png b/public/success-stories/open-graph.png
deleted file mode 100644
index a80ec69d..00000000
Binary files a/public/success-stories/open-graph.png and /dev/null differ
diff --git a/scripts/check_links.py b/scripts/check_links.py
new file mode 100644
index 00000000..e509149d
--- /dev/null
+++ b/scripts/check_links.py
@@ -0,0 +1,112 @@
+#!/usr/bin/env python3
+"""Crawl the built site in `dist/` for broken internal links and assets.
+
+Usage: `npm run build && python3 scripts/check_links.py [dist]`
+
+Walks every `*.html` file, extracts `href`/`src`/`srcset` from `a`, `img`,
+`source`, `link`, `script`, `iframe`, `video` and `meta` (og:image) tags,
+and reports any same-site URL that does not resolve to a file in `dist/`.
+Trailing slashes, `index.html`, query strings and fragments are handled.
+Exits non-zero if anything is broken. Stdlib only.
+"""
+
+import os
+import re
+import sys
+from html.parser import HTMLParser
+from urllib.parse import urlsplit, unquote
+
+SITE_HOSTS = {"shorebird.dev", "www.shorebird.dev"}
+TAGS = {"a", "img", "source", "link", "script", "iframe", "video", "meta"}
+
+
+class RefParser(HTMLParser):
+    def __init__(self):
+        super().__init__()
+        self.refs = []  # (tag, attr, value)
+
+    def handle_starttag(self, tag, attrs):
+        if tag not in TAGS:
+            return
+        attrs = dict(attrs)
+        if tag == "meta":
+            prop = attrs.get("property") or attrs.get("name") or ""
+            if prop in ("og:image", "twitter:image") and attrs.get("content"):
+                self.refs.append((tag, prop, attrs["content"]))
+            return
+        for attr in ("href", "src"):
+            if attrs.get(attr):
+                self.refs.append((tag, attr, attrs[attr]))
+        if attrs.get("srcset"):
+            for part in attrs["srcset"].split(","):
+                url = part.strip().split(" ")[0]
+                if url:
+                    self.refs.append((tag, "srcset", url))
+
+
+def resolve(dist, page_dir, url):
+    """Return the filesystem path a URL resolves to, or None if external."""
+    parts = urlsplit(url)
+    if parts.scheme in ("mailto", "tel", "javascript", "data"):
+        return None
+    if parts.scheme or parts.netloc:
+        if parts.netloc not in SITE_HOSTS:
+            return None
+    path = unquote(parts.path)
+    if not path:
+        return None  # pure fragment / query on the same page
+    if path.startswith("/"):
+        fs = os.path.join(dist, path.lstrip("/"))
+    else:
+        fs = os.path.normpath(os.path.join(page_dir, path))
+    return fs
+
+
+def exists(fs):
+    if os.path.isfile(fs):
+        return True
+    if os.path.isdir(fs) and os.path.isfile(os.path.join(fs, "index.html")):
+        return True
+    # `/foo` served as `/foo/index.html` or `/foo.html`
+    if os.path.isfile(fs.rstrip("/") + ".html"):
+        return True
+    return False
+
+
+def main(dist="dist"):
+    if not os.path.isdir(dist):
+        print(f"{dist}/ not found; run `npm run build` first", file=sys.stderr)
+        return 2
+    broken = {}
+    pages = 0
+    for root, _dirs, files in os.walk(dist):
+        for name in files:
+            if not name.endswith(".html"):
+                continue
+            pages += 1
+            page = os.path.join(root, name)
+            with open(page, encoding="utf-8", errors="replace") as f:
+                html = f.read()
+            parser = RefParser()
+            parser.feed(html)
+            for tag, attr, url in parser.refs:
+                fs = resolve(dist, root, url)
+                if fs is None or exists(fs):
+                    continue
+                rel = os.path.relpath(page, dist)
+                broken.setdefault(url, set()).add(f"{rel} <{tag} {attr}>")
+    if broken:
+        print(f"Checked {pages} pages; {len(broken)} broken internal reference(s):")
+        for url in sorted(broken):
+            print(f"  {url}")
+            for where in sorted(broken[url])[:5]:
+                print(f"      in {where}")
+            if len(broken[url]) > 5:
+                print(f"      ... and {len(broken[url]) - 5} more")
+        return 1
+    print(f"Checked {pages} pages; no broken internal references.")
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main(*sys.argv[1:2]))
diff --git a/scripts/import_webflow.py b/scripts/import_webflow.py
new file mode 100644
index 00000000..47cca182
--- /dev/null
+++ b/scripts/import_webflow.py
@@ -0,0 +1,1181 @@
+#!/usr/bin/env python3
+"""Import the Webflow CMS export (../webflow-migration/webflow-export/cms/*.json) into the Astro site.
+
+Python 3 stdlib only. Run from anywhere:
+
+    python3 scripts/import_webflow.py [--only blog,stories,data] [--no-download]
+
+What it does (idempotent; safe to re-run):
+
+* Blog posts  -> src/content/blog/<slug>.md
+    - Webflow slugs are canonical; drifted repo files are `git mv`-ed.
+    - Posts that already exist in the repo keep their hand-written Markdown
+      body and local cover; only the frontmatter is regenerated from the CMS.
+    - New posts get their HTML body converted to Markdown, body images
+      downloaded to src/assets/blog/<slug>/, cover to src/assets/blog/covers/,
+      and the share (OG) image to public/blog/og/<slug>.jpg (converted with
+      `sips`; social crawlers want JPEG/PNG, and JPEG is ~8x smaller).
+* Success stories -> src/content/success-stories/<slug>.md (same rules).
+* Site data -> src/data/{reviews,logos,team}.json with images downloaded to
+  src/assets/{testimonials,brands,team}/.
+* Author headshots -> src/assets/blog/headshots/ (the `authors` record lives
+  in src/layouts/blog.astro and is maintained by hand).
+
+Downloads use `curl -sfL` (urllib fails TLS verification on some machines)
+and are skipped when the destination file already exists.
+"""
+
+# cSpell:ignore adress campany charrefs ncol srcs allprojects xcodegen xcrun youtu
+# cSpell:ignore delated shorbird mutli specifc wasorganizational appy turaround witih miun
+
+from __future__ import annotations
+
+import argparse
+import html
+import json
+import os
+import re
+import shutil
+import subprocess
+import sys
+from concurrent.futures import ThreadPoolExecutor
+from html.parser import HTMLParser
+from urllib.parse import unquote, urlparse
+
+ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+# The Webflow snapshot lives outside the repo (parallel to it) so that it never
+# ends up in git history. Override with WEBFLOW_EXPORT=/path/to/webflow-export.
+EXPORT_ROOT = os.environ.get(
+    'WEBFLOW_EXPORT',
+    os.path.join(os.path.dirname(ROOT), 'webflow-migration', 'webflow-export'),
+)
+EXPORT = os.path.join(EXPORT_ROOT, 'cms')
+CONTENT = os.path.join(ROOT, 'src', 'content')
+ASSETS = os.path.join(ROOT, 'src', 'assets')
+DATA = os.path.join(ROOT, 'src', 'data')
+PUBLIC = os.path.join(ROOT, 'public')
+
+WEBFLOW_CDN = 'cdn.prod.website-files.com'
+
+# First line of every body this script converted from CMS HTML. Bodies without
+# it are hand-written and are never overwritten.
+GENERATED_MARKER = '<!-- Converted from the Webflow CMS export by scripts/import_webflow.py -->'
+
+# Repo slug -> Webflow slug. Webflow is canonical.
+BLOG_RENAMES = {
+    '1.0': '1',
+    'dart-3.5.0': 'dart-3-5-0',
+    'flutter-3.32-release': 'flutter-3-32-release',
+    'growing': 'shorebird-is-growing',
+    'building-great-developer-tools': 'building-good-software',
+}
+
+# Webflow author item id -> author key in src/layouts/blog.astro.
+AUTHOR_KEYS = {
+    '6972466eac5a1d06ea9c83ca': 'eseidel',
+    '6972463cc2f76698a24b9d46': 'felangel',
+    '6972467e88db469ca8db20d7': 'bryanoltman',
+    '6972467768e3644cd83dedda': 'tomarra',
+    '697246301f0f668fa84d1f95': 'dawn-ducky',
+    '6972462829d7f195142da6f4': 'shorebirdtech',
+    '6a8897db2c2e04bcc17a61ab': 'wesleypeck',
+    '6a34415cd8e1d6745dc4ee16': 'abhishekdoshi',
+    '69fe27888a585749b3957bf6': 'nickweatherley',
+    '69af068a6d5ba5dd0ba0f2e5': 'maccarrithers',
+    '69a1c652e7477a1536e075e7': 'brandonderosier',
+}
+
+# Authors whose headshot already lives in the repo under a different name.
+EXISTING_HEADSHOTS = {
+    'eseidel': 'eric-headshot.jpeg',
+    'felangel': 'felix-headshot.jpeg',
+    'bryanoltman': 'bryan-headshot.png',
+    'tomarra': 'tom-headshot.jpg',
+    'dawn-ducky': 'dawn-headshot.jpg',
+    'shorebirdtech': 'shorebird-headshot.png',
+}
+
+# The CMS has no `highlights` field for success stories; these are derived
+# from the story text for the stories that were authored on Webflow.
+STORY_HIGHLIGHTS = {
+    'scapia': [
+        'Early adopter of Code Push since the 2023 beta, now patching both Android and iOS',
+        'Targets patches to specific user cohorts with the Code Push package and Firebase Remote Config',
+        'Saved a flash sale by patching a critical stock-availability bug without an app store release',
+    ],
+    'vetc': [
+        "Vietnam's electronic toll collection platform, serving a large user base with financial transactions",
+        'Hotfix release times reduced from several days to a few hours',
+        'Ships urgent Flutter fixes with Code Push instead of waiting for app store approval',
+    ],
+}
+
+# Typos that exist in the CMS content itself. They are left as-is (the live
+# site has them) and hidden from cspell with an inline directive.
+CSPELL_IGNORE = {
+    'code-push-makes-your-app-more-secure-not-less': ['delated'],
+    'the-next-phase-of-shorebird-ci': ['shorbird'],
+    'portability-is-the-new-productivity': ['mutli'],
+    'making-the-shorebird-cli-agentic': ['specifc'],
+    'portable-software-ai-era': ['wasorganizational'],
+    'flutter-web-is-misunderstood': ['appy'],
+    'wagus': ['turaround'],
+    'solides': ['witih'],
+}
+
+# CMS logo names that don't match how the brand is written on the live site.
+LOGO_NAME_FIXES = {
+    'Jundlegames': 'Junglee Games',
+    'DeliveryHero': 'Delivery Hero',
+}
+
+# ---------------------------------------------------------------------------
+# Small helpers
+# ---------------------------------------------------------------------------
+
+
+def log(*args):
+    print(*args, file=sys.stderr)
+
+
+def load_items(name):
+    with open(os.path.join(EXPORT, name + '.json'), encoding='utf-8') as f:
+        data = json.load(f)
+    return [it for it in data['items'] if not it.get('isArchived')]
+
+
+def slugify(text):
+    text = unquote(text)
+    text = re.sub(r'[^A-Za-z0-9]+', '-', text).strip('-').lower()
+    return text or 'file'
+
+
+def url_filename(url, strip_hash=True):
+    """Return a clean local filename for a Webflow CDN url."""
+    name = unquote(urlparse(url).path.rsplit('/', 1)[-1])
+    if strip_hash:
+        # Webflow prefixes uploads with a 24-char hex id.
+        name = re.sub(r'^[0-9a-f]{24}_', '', name)
+    stem, dot, ext = name.rpartition('.')
+    if not dot:
+        stem, ext = name, ''
+    ext = ext.lower()
+    if ext == 'jpeg':
+        ext = 'jpg'
+    return slugify(stem) + ('.' + ext if ext else '')
+
+
+def url_ext(url):
+    ext = urlparse(url).path.rsplit('.', 1)[-1].lower()
+    return 'jpg' if ext == 'jpeg' else ext
+
+
+DOWNLOADS = {}  # dest path -> url
+
+
+CONVERT_TO_JPEG = set()
+
+
+def queue_download(url, dest, convert_to_jpeg=False):
+    """Register a download; the file is fetched later in run_downloads().
+
+    With convert_to_jpeg the downloaded file is re-encoded as JPEG (quality 85)
+    using macOS `sips`; if `sips` is unavailable the original bytes are kept.
+    """
+    if os.path.exists(dest):
+        return
+    existing = DOWNLOADS.get(dest)
+    if existing and existing != url:
+        raise SystemExit(f'conflicting downloads for {dest}: {existing} vs {url}')
+    DOWNLOADS[dest] = url
+    if convert_to_jpeg:
+        CONVERT_TO_JPEG.add(dest)
+
+
+def run_downloads(enabled=True):
+    if not DOWNLOADS:
+        return
+    if not enabled:
+        log(f'skipping {len(DOWNLOADS)} downloads (--no-download)')
+        return
+    log(f'downloading {len(DOWNLOADS)} files...')
+
+    def fetch(item):
+        dest, url = item
+        os.makedirs(os.path.dirname(dest), exist_ok=True)
+        tmp = dest + '.part'
+        r = subprocess.run(['curl', '-sfL', '-o', tmp, url])
+        if r.returncode != 0 or not os.path.exists(tmp):
+            log(f'  FAILED {url}')
+            if os.path.exists(tmp):
+                os.remove(tmp)
+            return False
+        if dest in CONVERT_TO_JPEG and shutil.which('sips'):
+            jpg = tmp + '.jpg'
+            r = subprocess.run(
+                ['sips', '-s', 'format', 'jpeg', '-s', 'formatOptions', '85', tmp, '--out', jpg],
+                capture_output=True,
+            )
+            if r.returncode == 0 and os.path.exists(jpg):
+                os.remove(tmp)
+                tmp = jpg
+        os.replace(tmp, dest)
+        return True
+
+    with ThreadPoolExecutor(max_workers=8) as ex:
+        results = list(ex.map(fetch, sorted(DOWNLOADS.items())))
+    failed = results.count(False)
+    log(f'  downloaded {len(results) - failed}, failed {failed}')
+    DOWNLOADS.clear()
+
+
+def git_mv(src, dst):
+    subprocess.run(['git', 'mv', src, dst], cwd=ROOT, check=True)
+
+
+# ---------------------------------------------------------------------------
+# YAML frontmatter emission (prettier reformats it afterwards)
+# ---------------------------------------------------------------------------
+
+_PLAIN_OK = re.compile(r'^[A-Za-z0-9][A-Za-z0-9 ,.!?()/&+\'β€™β€œβ€β€˜β€“β€”%$-]*$')
+_YAML_RESERVED = re.compile(
+    r'^(true|false|yes|no|null|~|on|off|[-+]?\d[\d_.]*|0x[0-9a-f]+)$', re.I
+)
+
+
+def yaml_scalar(value):
+    if isinstance(value, bool):
+        return 'true' if value else 'false'
+    if isinstance(value, (int, float)):
+        return str(value)
+    s = str(value)
+    if (
+        _PLAIN_OK.match(s)
+        and not _YAML_RESERVED.match(s)
+        and ': ' not in s
+        and ' #' not in s
+        and not s.endswith(':')
+        and s == s.strip()
+    ):
+        return s
+    return json.dumps(s, ensure_ascii=False)
+
+
+def frontmatter(fields, raw_blocks=None):
+    """fields: list of (key, value); value None/'' is skipped. raw_blocks: list
+    of preformatted YAML snippets appended verbatim."""
+    lines = ['---']
+    for key, value in fields:
+        if value is None or value == '':
+            continue
+        if isinstance(value, list):
+            if not value:
+                lines.append(f'{key}: []')
+            else:
+                lines.append(f'{key}:')
+                for v in value:
+                    lines.append(f'  - {yaml_scalar(v)}')
+        else:
+            lines.append(f'{key}: {yaml_scalar(value)}')
+    for block in raw_blocks or []:
+        lines.append(block.rstrip('\n'))
+    lines.append('---')
+    return '\n'.join(lines) + '\n'
+
+
+def split_frontmatter(text):
+    m = re.match(r'---\n(.*?)\n---\n?', text, re.S)
+    if not m:
+        raise ValueError('no frontmatter')
+    return m.group(1), text[m.end():]
+
+
+def fm_value(fm, key):
+    m = re.search(rf'^{key}:[ \t]*(.*)$', fm, re.M)
+    if not m:
+        return None
+    v = m.group(1).strip()
+    if len(v) >= 2 and v[0] == v[-1] and v[0] in '\'"':
+        v = v[1:-1]
+    return v
+
+
+def fm_block(fm, key):
+    """Return the raw YAML text for `key:` up to the next top-level key."""
+    m = re.search(rf'^{key}:.*?(?=^\S|\Z)', fm + '\n', re.M | re.S)
+    return m.group(0).rstrip('\n') if m else None
+
+
+# ---------------------------------------------------------------------------
+# HTML -> tree
+# ---------------------------------------------------------------------------
+
+VOID = {'img', 'br', 'hr', 'meta', 'link', 'input', 'source', 'wbr'}
+BLOCK = {
+    'p', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'ol', 'li', 'pre',
+    'blockquote', 'figure', 'figcaption', 'table', 'thead', 'tbody', 'tr',
+    'hr', 'iframe', 'script', 'style', 'section', 'article', 'video',
+}
+
+
+class Node:
+    __slots__ = ('tag', 'attrs', 'children')
+
+    def __init__(self, tag, attrs=None):
+        self.tag = tag
+        self.attrs = attrs or {}
+        self.children = []
+
+    def elements(self, tag=None):
+        return [c for c in self.children if isinstance(c, Node) and (tag is None or c.tag == tag)]
+
+    def find_all(self, tag):
+        out = []
+        for c in self.children:
+            if isinstance(c, Node):
+                if c.tag == tag:
+                    out.append(c)
+                out.extend(c.find_all(tag))
+        return out
+
+    def find(self, tag):
+        found = self.find_all(tag)
+        return found[0] if found else None
+
+    def text(self):
+        out = []
+        for c in self.children:
+            if isinstance(c, str):
+                out.append(c)
+            elif c.tag == 'br':
+                out.append('\n')
+            else:
+                out.append(c.text())
+        return ''.join(out)
+
+    def classes(self):
+        return self.attrs.get('class', '').split()
+
+
+class TreeBuilder(HTMLParser):
+    def __init__(self):
+        super().__init__(convert_charrefs=True)
+        self.root = Node('root')
+        self.stack = [self.root]
+
+    def handle_starttag(self, tag, attrs):
+        node = Node(tag, {k: (v if v is not None else '') for k, v in attrs})
+        self.stack[-1].children.append(node)
+        if tag not in VOID:
+            self.stack.append(node)
+
+    def handle_startendtag(self, tag, attrs):
+        self.stack[-1].children.append(Node(tag, {k: (v if v is not None else '') for k, v in attrs}))
+
+    def handle_endtag(self, tag):
+        for i in range(len(self.stack) - 1, 0, -1):
+            if self.stack[i].tag == tag:
+                del self.stack[i:]
+                return
+
+    def handle_data(self, data):
+        self.stack[-1].children.append(data)
+
+
+def parse_html(text):
+    p = TreeBuilder()
+    p.feed(text)
+    p.close()
+    return p.root
+
+
+def to_html(node):
+    """Serialize a subtree back to HTML (used for embeds we keep verbatim)."""
+    if isinstance(node, str):
+        return html.escape(node, quote=False)
+    attrs = ''.join(
+        f' {k}' if v == '' and k in ('allowfullscreen', 'async', 'defer') else f' {k}="{html.escape(v, quote=True)}"'
+        for k, v in node.attrs.items()
+    )
+    if node.tag in VOID:
+        return f'<{node.tag}{attrs}>'
+    if node.tag in ('script', 'style'):
+        inner = ''.join(c for c in node.children if isinstance(c, str))
+    else:
+        inner = ''.join(to_html(c) for c in node.children)
+    return f'<{node.tag}{attrs}>{inner}</{node.tag}>'
+
+
+# ---------------------------------------------------------------------------
+# Tree -> Markdown
+# ---------------------------------------------------------------------------
+
+SHELL_CMDS = (
+    'shorebird', 'flutter', 'dart', 'npm', 'npx', 'git', 'curl', 'brew', 'cd',
+    'ls', 'pod', 'xcodebuild', 'gradle', 'export', 'sudo', 'yarn', 'pip',
+    'mkdir', 'rm', 'cp', 'mv', 'cat', 'echo', 'adb', 'xcrun', 'open', 'claude',
+    'codex', 'gemini', 'copilot', 'cargo', 'make', 'sh', 'bash', 'shorebird_ci',
+    'gradlew', 'xcodegen', 'fastlane', 'ruby', 'python', 'python3', 'node', 'deno',
+)
+
+
+def guess_language(code):
+    s = code.strip()
+    first = s.splitlines()[0] if s else ''
+    if re.match(r'^(\$ |> )?(' + '|'.join(SHELL_CMDS) + r')\b', first) or re.match(r'^(\$ )?(\./|~/)', first):
+        return 'sh'
+    lines = [l for l in s.splitlines() if l.strip()]
+    if lines and all(re.match(r'^\s*(-\s+)?[\w.-]+:(\s.*)?$', l) or re.match(r'^\s*(-\s+\S|#)', l) for l in lines):
+        return 'yaml'
+    if re.search(r'^\s*(import \'package:|void main\(|class \w+ extends|Widget build\(|@override|final \w+ = |await |Future<)', s, re.M):
+        return 'dart'
+    if s.startswith('{') and s.endswith('}') and '":' in s:
+        return 'json'
+    if re.search(r'^(android|dependencies|plugins|allprojects|dependencyLocking)\s*\{', s, re.M) or 'compileSdk' in s:
+        return 'groovy'
+    if re.search(r'^\[?[\w-]+\]?\s*=\s*', s, re.M) and not re.search(r'^\s*[\w-]+:\s', s, re.M):
+        return 'toml' if re.search(r'^\[', s, re.M) else ''
+    if re.search(r'^[\w-]+:\s*(\S.*)?$', first) and re.search(r'^\s+[\w-]+:', s, re.M):
+        return 'yaml'
+    if re.search(r'<[a-zA-Z][^>]*>', s) and re.search(r'</[a-zA-Z]+>', s):
+        return 'xml' if s.lstrip().startswith('<?xml') or '<manifest' in s or '<key>' in s else 'html'
+    if s.startswith('[') and s.endswith(']'):
+        return 'json'
+    if re.match(r'^\[(WARN|INFO|ERROR|DEBUG)\]', s):
+        return ''
+    return ''
+
+
+def collapse_ws(text):
+    return re.sub(r'[ \t\r\n\f\v\xa0]+', ' ', text.replace('‍', '').replace('​', ''))
+
+
+_ESCAPE_INLINE = re.compile(r'([\\*_`\[\]])')
+_ESCAPE_LT = re.compile(r'<(?=[A-Za-z/!])')
+_ESCAPE_ENTITY = re.compile(r'&(?=[A-Za-z#][\w]*;)')
+
+
+def escape_text(text):
+    text = _ESCAPE_INLINE.sub(r'\\\1', text)
+    text = _ESCAPE_LT.sub(r'\\<', text)
+    text = _ESCAPE_ENTITY.sub('&', text)
+    return text
+
+
+def escape_block_start(text):
+    """Escape characters that would turn a paragraph into a heading/list/quote."""
+    return re.sub(r'^(\s*)([#>+-]|\d+[.)])(?=\s)', lambda m: m.group(1) + '\\' + m.group(2), text)
+
+
+def wrap_inline(inner, marker):
+    m = re.match(r'^(\s*)(.*?)(\s*)$', inner, re.S)
+    lead, core, trail = m.groups()
+    if not core:
+        return inner
+    if core.startswith(marker) and core.endswith(marker) and len(core) > 2 * len(marker):
+        return inner  # already wrapped (nested strong in strong etc.)
+    return f'{lead}{marker}{core}{marker}{trail}'
+
+
+def code_span(text):
+    text = text.replace('‍', '').strip().replace('\n', ' ')
+    if not text:
+        return ''
+    fence = '`'
+    while fence in text:
+        fence += '`'
+    pad = ' ' if (text.startswith('`') or text.endswith('`')) else ''
+    return f'{fence}{pad}{text}{pad}{fence}'
+
+
+class MarkdownRenderer:
+    def __init__(self, resolve_image, code_fallback=None):
+        # resolve_image(url) -> local/markdown path for the image src.
+        self.resolve_image = resolve_image
+        # (language, code) pairs used to fill empty <pre> elements in order.
+        self.code_fallback = list(code_fallback or [])
+        self.warnings = []
+
+    # -- entry -------------------------------------------------------------
+    def render(self, root):
+        blocks = [b.strip('\n') for b in self.blocks(root) if b and b.strip()]
+        # Webflow sometimes leaves a text-only copy of a table right after the
+        # table embed (cells concatenated into one paragraph). Drop those.
+        cleaned = []
+        for b in blocks:
+            if cleaned and cleaned[-1].startswith('| ') and not b.startswith(('|', '#', '<', '```', '![', '- ')):
+                header = cleaned[-1].split('\n', 1)[0]
+                key = re.sub(r'\s+', '', ''.join(header.strip('|').split('|'))).lower()
+                if key and re.sub(r'\s+', '', b).lower().startswith(key):
+                    self.warnings.append('dropped pasted table text: ' + b[:40])
+                    continue
+            cleaned.append(b)
+        if self.code_fallback:
+            self.warnings.append(f'{len(self.code_fallback)} unused live code blocks')
+        out = '\n\n'.join(cleaned)
+        out = re.sub(r'\n{3,}', '\n\n', out)
+        return out.strip() + '\n'
+
+    # -- block level -------------------------------------------------------
+    def blocks(self, node):
+        out = []
+        inline_buf = []
+
+        def flush():
+            if inline_buf:
+                text = self.inline_nodes(inline_buf).strip()
+                if text:
+                    out.append(escape_block_start(text))
+                inline_buf.clear()
+
+        for child in node.children:
+            if isinstance(child, Node) and child.tag in BLOCK:
+                flush()
+                out.extend(self.block(child))
+            else:
+                inline_buf.append(child)
+        flush()
+        return out
+
+    def block(self, node):
+        tag = node.tag
+        if tag == 'p':
+            imgs = node.elements('img')
+            if imgs and not collapse_ws(node.text()).strip() and len(node.elements()) == len(imgs):
+                return [self.image(img) for img in imgs]
+            kids = node.elements()
+            if len(kids) == 1 and kids[0].tag == 'code' and not collapse_ws(
+                ''.join(c for c in node.children if isinstance(c, str))
+            ).strip():
+                code = kids[0].text().replace('‍', '').strip()
+                if '\n' in code:
+                    return [self.code_block(kids[0])]
+            text = self.inline(node).strip()
+            return [escape_block_start(text)] if text else []
+        if tag in ('h1', 'h2', 'h3', 'h4', 'h5', 'h6'):
+            text = self.inline(node, plain=True).strip()
+            return [f'{"#" * int(tag[1])} {text}'] if text else []
+        if tag == 'pre':
+            return [self.code_block(node)]
+        if tag in ('ul', 'ol'):
+            return [self.list_block(node)]
+        if tag == 'blockquote':
+            if 'twitter-tweet' in node.classes():
+                return [to_html(node)]
+            inner = '\n\n'.join(self.blocks(node))
+            return ['\n'.join(('> ' + line) if line else '>' for line in inner.split('\n'))]
+        if tag == 'figure':
+            return self.figure(node)
+        if tag == 'hr':
+            return ['---']
+        if tag == 'table':
+            return [self.table(node)]
+        if tag == 'iframe':
+            return [self.iframe(node)]
+        if tag == 'script':
+            return [to_html(node)]
+        if tag == 'style':
+            return []
+        if tag == 'div':
+            if node.attrs.get('data-rt-embed-type'):
+                return self.embed(node)
+            return self.blocks(node)
+        if tag in ('figcaption', 'li', 'thead', 'tbody', 'tr', 'section', 'article', 'video'):
+            return self.blocks(node)
+        return self.blocks(node)
+
+    def embed(self, node):
+        out = []
+        for child in node.children:
+            if isinstance(child, str):
+                if child.strip():
+                    out.append(escape_text(collapse_ws(child)).strip())
+                continue
+            table = child if child.tag == 'table' else None
+            if table is None and child.tag == 'div':
+                inner = child.elements()
+                if len(inner) == 1 and inner[0].tag == 'table':
+                    table = inner[0]
+            if table is not None:
+                out.append(self.table(table))
+            elif child.tag == 'iframe':
+                out.append(self.iframe(child))
+            elif child.tag == 'style':
+                continue
+            else:
+                out.append(to_html(child))
+        return out
+
+    def figure(self, node):
+        out = []
+        img = node.find('img')
+        iframe = node.find('iframe')
+        if img is not None:
+            out.append(self.image(img))
+        elif iframe is not None:
+            out.append(self.iframe(iframe))
+        cap = node.find('figcaption')
+        if cap is not None:
+            text = self.inline(cap).strip()
+            if text:
+                out.append(f'_{text}_')
+        return out
+
+    def iframe(self, node):
+        src = node.attrs.get('src', '')
+        title = node.attrs.get('title', '')
+        if 'youtube.com' in src or 'youtu.be' in src:
+            # Match the convention used by hand-written posts in this repo.
+            title = title or 'YouTube video player'
+            return (
+                '<div style="display:flex;justify-content:center">\n'
+                f'  <iframe style="aspect-ratio:16/9;width:100%;margin-inline:auto;margin-bottom:1em" '
+                f'src="{html.escape(src, quote=True)}" title="{html.escape(title, quote=True)}" '
+                'frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; '
+                'gyroscope; picture-in-picture; web-share" '
+                'referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>\n'
+                '</div>'
+            )
+        return to_html(node)
+
+    def image(self, node):
+        src = node.attrs.get('src', '')
+        alt = node.attrs.get('alt', '')
+        if alt.startswith('__wf_'):
+            alt = ''
+        alt = escape_text(collapse_ws(alt)).strip()
+        return f'![{alt}]({self.resolve_image(src)})'
+
+    def code_block(self, node):
+        code = node.find('code') if node.tag != 'code' else node
+        text = (code if code is not None else node).text()
+        text = text.replace('‍', '').replace('\xa0', ' ').strip('\n')
+        hint = ''
+        cls = (code.classes() if code is not None else []) + node.classes()
+        for c in cls:
+            if c.startswith('language-'):
+                hint = c[len('language-'):]
+        if not text.strip():
+            # The CMS API drops the contents of rich-text code blocks; fill
+            # them from the rendered live page when we have it.
+            if self.code_fallback:
+                hint, text = self.code_fallback.pop(0)
+            else:
+                self.warnings.append('empty code block with no fallback')
+                return ''
+        lang = guess_language(text) or hint
+        fence = '```'
+        while fence in text:
+            fence += '`'
+        return f'{fence}{lang}\n{text}\n{fence}'
+
+    def list_block(self, node, depth=0):
+        ordered = node.tag == 'ol'
+        try:
+            start = int(node.attrs.get('start', '1'))
+        except ValueError:
+            start = 1
+        lines = []
+        for i, li in enumerate(node.elements('li')):
+            marker = f'{start + i}.' if ordered else '-'
+            pad = ' ' * (len(marker) + 1)
+            inline_buf = []
+            parts = []  # list of (kind, text)
+
+            def flush():
+                if inline_buf:
+                    text = self.inline_nodes(inline_buf).strip()
+                    if text:
+                        parts.append(text)
+                    inline_buf.clear()
+
+            for c in li.children:
+                if isinstance(c, Node) and c.tag in ('ul', 'ol'):
+                    flush()
+                    parts.append(self.list_block(c, depth + 1))
+                elif isinstance(c, Node) and c.tag in BLOCK:
+                    flush()
+                    parts.extend(self.block(c))
+                else:
+                    inline_buf.append(c)
+            flush()
+            if not parts:
+                parts = ['']
+            # Nested lists directly follow their parent item without a blank line.
+            body = '\n'.join(parts)
+            first, _, rest = body.partition('\n')
+            item = f'{marker} {first}'
+            if rest:
+                item += '\n' + '\n'.join((pad + l) if l else '' for l in rest.split('\n'))
+            lines.append(item)
+        return '\n'.join(lines)
+
+    def table(self, node):
+        rows = []
+        for tr in node.find_all('tr'):
+            cells = [c for c in tr.elements() if c.tag in ('td', 'th')]
+            if not cells:
+                continue
+            rows.append([self.cell(c) for c in cells])
+        if not rows:
+            return ''
+        ncol = max(len(r) for r in rows)
+        rows = [r + [''] * (ncol - len(r)) for r in rows]
+        header, body = rows[0], rows[1:]
+        lines = ['| ' + ' | '.join(header) + ' |', '| ' + ' | '.join(['---'] * ncol) + ' |']
+        for r in body:
+            lines.append('| ' + ' | '.join(r) + ' |')
+        return '\n'.join(lines)
+
+    def cell(self, node):
+        text = self.inline(node).replace('\n', ' ')
+        text = re.sub(r' {2,}', ' ', text).strip()
+        return text.replace('|', '\\|')
+
+    # -- inline level ------------------------------------------------------
+    def inline(self, node, plain=False):
+        return self.inline_nodes(node.children, plain)
+
+    def inline_nodes(self, nodes, plain=False):
+        parts = []
+        for c in nodes:
+            parts.append(self.inline_node(c, plain))
+        text = ''.join(parts)
+        # Collapse runs of spaces created by joining adjacent text nodes.
+        text = re.sub(r'(?<! ) {2,}', ' ', text)
+        # <br> is rendered as a hard break ("\\\n"). Two or more in a row are
+        # really a paragraph break, and breaks at the edges are noise.
+        text = re.sub(r'(?: *\\\n *){2,}', '\n\n', text)
+        text = re.sub(r'^(?:\s*\\\n)+|(?:\\\n\s*)+$', '', text)
+        text = re.sub(r'\\\n *\n', '\n\n', text)
+        text = re.sub(r'\n *\\\n', '\n\n', text)
+        if plain:
+            text = text.replace('\\\n', ' ').replace('\n', ' ')
+        # A continuation line must not look like a list item or heading.
+        lines = text.split('\n')
+        text = '\n'.join(lines[:1] + [escape_block_start(l) for l in lines[1:]])
+        return text.strip(' ')
+
+    def inline_node(self, c, plain=False):
+        if isinstance(c, str):
+            return escape_text(collapse_ws(c))
+        tag = c.tag
+        if tag in ('strong', 'b'):
+            inner = self.inline(c, plain)
+            return inner if plain else wrap_inline(inner, '**')
+        if tag in ('em', 'i'):
+            inner = self.inline(c, plain)
+            return inner if plain else wrap_inline(inner, '_')
+        if tag == 'code':
+            return code_span(c.text())
+        if tag == 'a':
+            href = c.attrs.get('href', '').strip()
+            inner = self.inline(c, plain)
+            if not inner.strip():
+                return ''
+            if not href:
+                return inner
+            m = re.match(r'^(\s*)(.*?)(\s*)$', inner, re.S)
+            lead, core, trail = m.groups()
+            href = href.replace(' ', '%20').replace(')', '%29')
+            return f'{lead}[{core}]({href}){trail}'
+        if tag == 'br':
+            return '\\\n'
+        if tag == 'img':
+            return self.image(c)
+        if tag in ('script', 'style'):
+            return ''
+        if tag in ('p', 'div') or tag in BLOCK:
+            # Block element inside an inline context (e.g. <p> inside <a>).
+            inner = self.inline(c, plain)
+            return '\n' + inner.strip() + '\n'
+        return self.inline(c, plain)
+
+
+def html_to_markdown(html_text, resolve_image, code_fallback=None, name=''):
+    renderer = MarkdownRenderer(resolve_image, code_fallback)
+    md = renderer.render(parse_html(html_text))
+    for w in renderer.warnings:
+        log(f'  {name}: {w}')
+    return md
+
+
+def live_code_blocks(kind, slug):
+    """Code blocks from the rendered live page saved as
+    webflow-export/pages/<kind>__<slug>.html (the CMS API exports rich-text
+    code blocks as empty <pre></pre>). Returns [(language, code), ...]."""
+    path = os.path.join(EXPORT_ROOT, 'pages', f'{kind}__{slug}.html')
+    if not os.path.exists(path):
+        return []
+    with open(path, encoding='utf-8') as f:
+        page = f.read()
+    out = []
+    for m in re.finditer(r'<pre[^>]*class="w-code-block"[^>]*>(.*?)</pre>', page, re.S):
+        lang = re.search(r'language-([\w+-]+)', m.group(1))
+        code = html.unescape(re.sub(r'<[^>]+>', '', m.group(1)))
+        out.append((lang.group(1) if lang else '', code))
+    return out
+
+
+def make_image_resolver(slug, asset_dir, md_prefix):
+    """Download CDN images into asset_dir and rewrite srcs to relative paths."""
+    used = {}
+
+    def resolve(url):
+        if WEBFLOW_CDN not in url:
+            return url
+        name = url_filename(url)
+        if used.get(name, url) != url:
+            # Two different files with the same clean name: keep them apart.
+            stem, dot, ext = name.rpartition('.')
+            suffix = re.sub(r'[^0-9a-f]', '', urlparse(url).path.rsplit('/', 1)[-1][:24])[-6:]
+            name = f'{stem}-{suffix}.{ext}' if dot else f'{name}-{suffix}'
+        used[name] = url
+        queue_download(url, os.path.join(asset_dir, name))
+        return f'{md_prefix}/{name}'
+
+    return resolve
+
+
+def strip_leading_title(md, title):
+    """Drop a leading `# Title` heading; the layouts render the title."""
+    m = re.match(r'# (.+)\n\n', md)
+    if m and re.sub(r'\W+', '', m.group(1)).lower() == re.sub(r'\W+', '', title).lower():
+        return md[m.end():]
+    return md
+
+
+def normalize_reading_time(value):
+    """CMS values look like "6 min read" / "2 minute read" / "5 miun"."""
+    m = re.search(r'\d+', value or '')
+    return f'{m.group(0)} min read' if m else None
+
+
+def with_cspell_ignore(slug, body):
+    words = CSPELL_IGNORE.get(slug)
+    if not words:
+        return body
+    directive = f'<!-- cSpell:ignore {" ".join(words)} -->'
+    if directive in body:
+        return body
+    body = re.sub(r'<!-- cSpell:ignore [^>]*-->\n\n?', '', body, count=1)
+    return directive + '\n\n' + body.lstrip('\n')
+
+
+def date_only(value):
+    return (value or '')[:10] or None
+
+
+# ---------------------------------------------------------------------------
+# Blog
+# ---------------------------------------------------------------------------
+
+
+def import_blog():
+    blog_dir = os.path.join(CONTENT, 'blog')
+    covers_dir = os.path.join(ASSETS, 'blog', 'covers')
+    og_dir = os.path.join(PUBLIC, 'blog', 'og')
+
+    # Rename drifted repo files to the Webflow slug (idempotent).
+    for old, new in BLOG_RENAMES.items():
+        old_path = os.path.join(blog_dir, old + '.md')
+        new_path = os.path.join(blog_dir, new + '.md')
+        if os.path.exists(old_path) and not os.path.exists(new_path):
+            log(f'git mv blog/{old}.md -> blog/{new}.md')
+            git_mv(old_path, new_path)
+
+    items = load_items('blogs')
+    stats = {'kept': 0, 'converted': 0}
+    for it in items:
+        fd = it['fieldData']
+        slug = fd['slug']
+        path = os.path.join(blog_dir, slug + '.md')
+        author = AUTHOR_KEYS.get(fd.get('author-2'))
+        if not author:
+            raise SystemExit(f'unknown author id {fd.get("author-2")} on {slug}')
+
+        existing_body = None
+        cover = None
+        if os.path.exists(path):
+            with open(path, encoding='utf-8') as f:
+                fm, body = split_frontmatter(f.read())
+            cover = fm_value(fm, 'cover')
+            if GENERATED_MARKER not in body:
+                existing_body = body
+
+        cover_url = (fd.get('featured-image') or {}).get('url')
+        if not cover or not os.path.exists(os.path.join(covers_dir, cover)):
+            if cover_url:
+                cover = f'{slug}.{url_ext(cover_url)}'
+                queue_download(cover_url, os.path.join(covers_dir, cover))
+
+        og_url = (fd.get('shared-image') or {}).get('url')
+        og_image = None
+        if og_url:
+            og_name = f'{slug}.jpg'
+            og_path = os.path.join(og_dir, og_name)
+            if not os.path.exists(og_path):
+                queue_download(og_url, og_path, convert_to_jpeg=True)
+            og_image = f'/blog/og/{og_name}'
+
+        generated = existing_body is None
+        if generated:
+            resolver = make_image_resolver(
+                slug, os.path.join(ASSETS, 'blog', slug), f'../../assets/blog/{slug}'
+            )
+            body = html_to_markdown(
+                fd.get('content') or '', resolver, live_code_blocks('blog', slug), name=slug
+            )
+            body = GENERATED_MARKER + '\n\n' + strip_leading_title(body, fd['name'])
+            stats['converted'] += 1
+        else:
+            body = existing_body
+            stats['kept'] += 1
+
+        fields = [
+            ('title', fd['name'].strip()),
+            ('author', author),
+            ('description', (fd.get('excerpt') or fd.get('article-intro') or '').strip()),
+            ('date', date_only(fd.get('publish-date'))),
+            ('cover', cover),
+            ('intro', (fd.get('article-intro') or '').strip()),
+            ('readingTime', normalize_reading_time(fd.get('reading-time'))),
+            ('ogImage', og_image),
+            ('seoTitle', (fd.get('seo---title') or '').strip()),
+            ('seoDescription', (fd.get('seo---meta-description') or '').strip()),
+            ('highlight', True if fd.get('highlight-article') else None),
+        ]
+        body = with_cspell_ignore(slug, body)
+        with open(path, 'w', encoding='utf-8') as f:
+            f.write(frontmatter(fields) + '\n' + body.lstrip('\n'))
+    log(f'blog: {len(items)} posts ({stats["kept"]} kept bodies, {stats["converted"]} converted)')
+
+
+# ---------------------------------------------------------------------------
+# Success stories
+# ---------------------------------------------------------------------------
+
+
+def import_success_stories():
+    dir_ = os.path.join(CONTENT, 'success-stories')
+    covers_dir = os.path.join(ASSETS, 'success-stories', 'covers')
+    items = load_items('success-stories')
+    stats = {'kept': 0, 'converted': 0}
+    for it in items:
+        fd = it['fieldData']
+        slug = fd['slug']
+        path = os.path.join(dir_, slug + '.md')
+        if not os.path.exists(path) and os.path.exists(os.path.join(dir_, slug + '.mdx')):
+            path = os.path.join(dir_, slug + '.mdx')
+
+        existing_body = None
+        cover = None
+        highlights_block = None
+        if os.path.exists(path):
+            with open(path, encoding='utf-8') as f:
+                fm, body = split_frontmatter(f.read())
+            cover = fm_value(fm, 'cover')
+            highlights_block = fm_block(fm, 'highlights')
+            if GENERATED_MARKER not in body:
+                existing_body = body
+
+        cover_url = (fd.get('featured-image') or {}).get('url')
+        if not cover or not os.path.exists(os.path.join(covers_dir, cover)):
+            if cover_url:
+                cover = f'{slug}-cover.{url_ext(cover_url)}'
+                queue_download(cover_url, os.path.join(covers_dir, cover))
+
+        generated = existing_body is None
+        if generated:
+            resolver = make_image_resolver(
+                slug,
+                os.path.join(ASSETS, 'success-stories', slug),
+                f'../../assets/success-stories/{slug}',
+            )
+            body = html_to_markdown(
+                fd.get('content') or '', resolver, live_code_blocks('success-stories', slug), name=slug
+            )
+            body = GENERATED_MARKER + '\n\n' + strip_leading_title(body, fd['name'])
+            stats['converted'] += 1
+        else:
+            body = existing_body
+            stats['kept'] += 1
+
+        website = (fd.get('website-url-adress') or '').strip()
+        if not website:
+            raw = (fd.get('website-url') or '').strip()
+            website = raw if raw.startswith('http') else ''
+
+        fields = [
+            ('title', fd['name'].strip()),
+            ('description', (fd.get('summary') or fd.get('customer-story-intro') or '').strip()),
+            ('date', date_only(fd.get('publish-date'))),
+            ('cover', cover),
+            ('industry', (fd.get('industry') or '').strip()),
+            ('companySize', (fd.get('company-size') or '').strip()),
+            ('website', website),
+            ('intro', (fd.get('customer-story-intro') or '').strip()),
+            ('seoTitle', (fd.get('seo---title') or '').strip()),
+            ('seoDescription', (fd.get('seo---meta-description') or '').strip()),
+        ]
+        raw_blocks = []
+        if highlights_block and not generated:
+            raw_blocks.append(highlights_block)
+        else:
+            fields.append(('highlights', STORY_HIGHLIGHTS.get(slug, [])))
+        body = with_cspell_ignore(slug, body)
+        with open(path, 'w', encoding='utf-8') as f:
+            f.write(frontmatter(fields, raw_blocks) + '\n' + body.lstrip('\n'))
+    log(f'success stories: {len(items)} ({stats["kept"]} kept bodies, {stats["converted"]} converted)')
+
+
+# ---------------------------------------------------------------------------
+# Site data (reviews, logos, team) + author headshots
+# ---------------------------------------------------------------------------
+
+
+def asset_path(dir_name, filename):
+    return f'/src/assets/{dir_name}/{filename}'
+
+
+def find_existing(dir_, stem):
+    if not os.path.isdir(dir_):
+        return None
+    for name in sorted(os.listdir(dir_)):
+        if name.rsplit('.', 1)[0] == stem:
+            return name
+    return None
+
+
+def write_json(name, data):
+    os.makedirs(DATA, exist_ok=True)
+    path = os.path.join(DATA, name)
+    with open(path, 'w', encoding='utf-8') as f:
+        json.dump(data, f, indent=2, ensure_ascii=False)
+        f.write('\n')
+    log(f'wrote src/data/{name} ({len(data)} entries)')
+
+
+def image_asset(image, dir_name, stem):
+    """Queue a CMS image for download into src/assets/<dir_name>/<stem>.<ext>
+    (skipped if already present) and return its /src path."""
+    dir_ = os.path.join(ASSETS, dir_name)
+    url = (image or {}).get('url')
+    if not url:
+        return None
+    name = f'{stem}.{url_ext(url)}'
+    queue_download(url, os.path.join(dir_, name))
+    return asset_path(dir_name, name)
+
+
+def import_reviews():
+    out = []
+    for it in load_items('reviews'):
+        fd = it['fieldData']
+        role = (fd.get('role') or '').strip()
+        # "Head of Engineering, Mobile at Kijiji" / "Engineer, Codemagic" -> company.
+        company = None
+        m = re.search(r'\bat\s+([^,]+)$', role) or re.search(r',\s*([^,]+)$', role)
+        if m:
+            company = m.group(1).strip()
+        else:
+            # Fall back to the company logo name ("chai.svg" is a placeholder).
+            logo_stem = url_filename((fd.get('campany-logo') or {}).get('url', '')).rsplit('.', 1)[0]
+            company = {'flame': 'Flame', 'pushpress': 'PushPress'}.get(logo_stem)
+        out.append(
+            {
+                'slug': fd['slug'],
+                'name': fd['name'].strip(),
+                'role': role,
+                'company': company,
+                'quote': (fd.get('review') or '').strip(),
+                'avatar': image_asset(fd.get('profile-picture'), 'testimonials', fd['slug']),
+                'logo': image_asset(fd.get('campany-logo'), 'testimonials/logos', url_filename((fd.get('campany-logo') or {}).get('url', '')).rsplit('.', 1)[0]),
+            }
+        )
+    write_json('reviews.json', out)
+
+
+def import_logos():
+    out = []
+    for it in load_items('logos'):
+        fd = it['fieldData']
+        name = LOGO_NAME_FIXES.get(fd['name'].strip(), fd['name'].strip())
+        out.append(
+            {
+                'slug': fd['slug'],
+                'name': name,
+                'logo': image_asset(fd.get('logo'), 'brands', fd['slug']),
+            }
+        )
+    # The live homepage marquee also shows PushPress, which is not in the CMS
+    # logo collection; reuse the logo that already lives in the repo.
+    if not any(l['slug'] == 'pushpress' for l in out):
+        existing = find_existing(os.path.join(ASSETS, 'brands'), 'pushpress')
+        if existing:
+            out.append({'slug': 'pushpress', 'name': 'PushPress', 'logo': asset_path('brands', existing)})
+    write_json('logos.json', out)
+
+
+def import_team():
+    out = []
+    for it in load_items('teams'):
+        fd = it['fieldData']
+        if fd['slug'] == 'you':
+            continue  # placeholder "join us" card; the about page renders its own
+        out.append(
+            {
+                'slug': fd['slug'],
+                'name': fd['name'].strip(),
+                'role': (fd.get('role') or '').strip(),
+                'headshot': image_asset(fd.get('profile-photo'), 'team', fd['slug']),
+                'linkedin': fd.get('linkedin-url') or None,
+                'linkedinLabel': (fd.get('linkedin-aria-label') or '').strip() or None,
+                'order': fd.get('order'),
+                'draft': bool(it.get('isDraft')),
+            }
+        )
+    out.sort(key=lambda t: (t['order'] is None, t['order'] or 0, t['name']))
+    write_json('team.json', out)
+
+
+def import_author_headshots():
+    dir_ = os.path.join(ASSETS, 'blog', 'headshots')
+    for it in load_items('authors'):
+        fd = it['fieldData']
+        key = AUTHOR_KEYS.get(it['id'])
+        if not key:
+            log(f'  unmapped author {it["id"]} ({fd.get("name")})')
+            continue
+        if key in EXISTING_HEADSHOTS or find_existing(dir_, key):
+            continue
+        url = (fd.get('image') or {}).get('url')
+        if url:
+            queue_download(url, os.path.join(dir_, f'{key}.{url_ext(url)}'))
+    log('author headshots queued; author records live in src/layouts/blog.astro')
+
+
+# ---------------------------------------------------------------------------
+
+
+def main():
+    ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
+    ap.add_argument('--only', default='blog,stories,data', help='comma list of: blog, stories, data')
+    ap.add_argument('--no-download', action='store_true', help='skip image downloads')
+    args = ap.parse_args()
+    only = set(args.only.split(','))
+
+    if 'blog' in only:
+        import_blog()
+        import_author_headshots()
+    if 'stories' in only:
+        import_success_stories()
+    if 'data' in only:
+        import_reviews()
+        import_logos()
+        import_team()
+    run_downloads(enabled=not args.no_download)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/assets/404/flying-bird.png b/src/assets/404/flying-bird.png
new file mode 100644
index 00000000..21ac8a68
Binary files /dev/null and b/src/assets/404/flying-bird.png differ
diff --git a/src/assets/about/accel.webp b/src/assets/about/accel.webp
new file mode 100644
index 00000000..cb0ebf8b
Binary files /dev/null and b/src/assets/about/accel.webp differ
diff --git a/src/assets/about/hero-logos.svg b/src/assets/about/hero-logos.svg
new file mode 100644
index 00000000..74f25858
--- /dev/null
+++ b/src/assets/about/hero-logos.svg
@@ -0,0 +1,56 @@
+<svg width="360" height="120" viewBox="0 0 360 120" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_8320_6496)">
+<g filter="url(#filter0_d_8320_6496)">
+<path d="M127.458 57.382L120.071 49.9941C120.493 51.4797 121.511 56.0515 121.57 56.7831L127.458 57.382Z" fill="#A79772"/>
+<path d="M50.8809 64.6543C50.6186 64.3455 50.4758 64.1702 50.4629 64.1543L48.5479 65.7031C47.726 64.6873 47.8412 63.2064 48.8096 62.3291C49.7738 61.4557 51.25 61.4832 52.1807 62.3896C52.1814 62.3903 52.1824 62.3914 52.1836 62.3926C52.1917 62.4002 52.2106 62.4181 52.2402 62.4443C52.2999 62.4973 52.402 62.5841 52.543 62.6943C52.8266 62.916 53.2612 63.2255 53.8262 63.5371C54.9612 64.1632 56.5639 64.7695 58.5059 64.7695C60.7881 64.7695 65.2488 64.4779 69.6631 62.1328C73.9832 59.8378 78.4654 55.471 80.752 46.8965C82.7709 39.3255 85.7281 35.1095 89.4199 33.6895C89.9191 33.4975 90.4116 33.3639 90.8936 33.2803L89.1973 30.6611C88.7176 29.9202 88.6207 28.938 89.0518 28.0781C89.2755 27.632 89.6661 27.1833 90.248 26.9092C90.8482 26.6265 91.477 26.6115 92.0068 26.7539C93.9155 27.2669 105.35 30.5535 113.483 38.3037C117.604 42.2302 120.994 47.414 121.738 54.041C122.483 60.6654 120.541 68.3514 114.743 77.2012L114.688 77.2842L114.627 77.3633C107.788 86.1565 100.049 89.9933 92.2139 90.5068C84.496 91.0127 77.031 88.271 70.6494 84.6045C64.2475 80.9263 58.7299 76.199 54.835 72.4258C52.8808 70.5327 51.3197 68.8644 50.2432 67.665C49.7047 67.0651 49.2861 66.582 49 66.2451C48.8569 66.0766 48.7467 65.9441 48.6709 65.8525C48.6331 65.8069 48.6035 65.7712 48.583 65.7461L48.5596 65.7168L48.5518 65.708L48.5498 65.7051C48.549 65.7041 48.5485 65.7033 50.4629 64.1543C50.4694 64.1624 50.6125 64.3384 50.8809 64.6543ZM90.1182 88.1006C90.3085 88.1024 90.4989 88.103 90.6895 88.1006C90.4989 88.103 90.3085 88.1023 90.1182 88.1006ZM88.7656 88.0547C89.1947 88.0801 89.6244 88.0956 90.0547 88.1006C89.6244 88.0956 89.1947 88.0801 88.7656 88.0547ZM90.7695 88.0986C90.9745 88.0955 91.1796 88.0911 91.3848 88.083C91.1796 88.0911 90.9745 88.0955 90.7695 88.0986ZM92.6934 87.9971C92.2598 88.0366 91.8265 88.0649 91.3936 88.082C91.8265 88.0649 92.2598 88.0366 92.6934 87.9971ZM86.8057 87.8701C87.4495 87.953 88.0955 88.0138 88.7432 88.0527C88.0955 88.0138 87.4495 87.953 86.8057 87.8701ZM92.7529 87.9912C92.9342 87.9742 93.1155 87.9556 93.2969 87.9346C93.1155 87.9556 92.9342 87.9742 92.7529 87.9912ZM94.6709 87.7363C94.2536 87.8088 93.8362 87.8695 93.4189 87.9199C93.8362 87.8695 94.2536 87.8088 94.6709 87.7363ZM85.5322 87.6777C85.9417 87.7483 86.3522 87.8107 86.7637 87.8643C86.3522 87.8107 85.9417 87.7482 85.5322 87.6777ZM82.291 86.9473C83.3397 87.238 84.3981 87.48 85.4639 87.666C84.3981 87.48 83.3397 87.238 82.291 86.9473ZM97.3184 87.1211C96.6742 87.3094 96.0292 87.4685 95.3838 87.6006C96.0292 87.4685 96.6742 87.3094 97.3184 87.1211ZM97.373 87.1045C97.5681 87.047 97.7632 86.9876 97.958 86.9248C97.7632 86.9876 97.5681 87.047 97.373 87.1045ZM99.9336 86.1924C99.2989 86.4591 98.6628 86.6957 98.0254 86.9033C98.6628 86.6957 99.2989 86.4591 99.9336 86.1924ZM81.1729 86.6172C81.2782 86.65 81.3837 86.682 81.4893 86.7139C81.3837 86.682 81.2782 86.65 81.1729 86.6172ZM80.2354 86.3115C80.2788 86.3263 80.3217 86.3428 80.3652 86.3574C80.3217 86.3428 80.2788 86.3263 80.2354 86.3115ZM100.651 85.877C101.078 85.682 101.503 85.4743 101.928 85.251C101.503 85.4743 101.078 85.682 100.651 85.877ZM79.2002 85.9443C79.322 85.9895 79.4443 86.0332 79.5664 86.0771C79.4443 86.0332 79.322 85.9895 79.2002 85.9443ZM78.2373 85.5732C78.3125 85.6033 78.3876 85.6335 78.4629 85.6631C78.3876 85.6335 78.3125 85.6033 78.2373 85.5732ZM77.3389 85.2031C77.4096 85.2332 77.4808 85.2623 77.5518 85.292C77.4808 85.2623 77.4096 85.2332 77.3389 85.2031ZM102.64 84.8604C103.263 84.5072 103.885 84.1232 104.504 83.7051C103.885 84.1232 103.263 84.5072 102.64 84.8604ZM76.2871 84.7402C76.3798 84.7824 76.4725 84.8247 76.5654 84.8662C76.4725 84.8247 76.3798 84.7824 76.2871 84.7402ZM75.4697 84.3604C75.5197 84.3842 75.5701 84.407 75.6201 84.4307C75.5701 84.407 75.5197 84.3842 75.4697 84.3604ZM74.4229 83.8447C74.5145 83.8911 74.6063 83.9375 74.6982 83.9834C74.6063 83.9375 74.5145 83.8911 74.4229 83.8447ZM104.596 83.6426C104.772 83.5221 104.949 83.3984 105.125 83.2725C104.949 83.3984 104.772 83.5221 104.596 83.6426ZM73.5811 83.4102C73.62 83.4308 73.6592 83.4511 73.6982 83.4717C73.6592 83.4511 73.62 83.4308 73.5811 83.4102ZM109.576 79.4258C108.141 80.8959 106.682 82.1527 105.204 83.2158C106.682 82.1526 108.141 80.8959 109.576 79.4258ZM72.6143 82.8848C72.6926 82.9282 72.771 82.9715 72.8496 83.0146C72.771 82.9715 72.6926 82.9282 72.6143 82.8848ZM70.752 81.8057C71.1185 82.0271 71.4877 82.2457 71.8604 82.46C71.4877 82.2457 71.1185 82.0271 70.752 81.8057ZM69.7246 81.1709C70.0322 81.3649 70.3421 81.5567 70.6543 81.7461C70.3421 81.5567 70.0322 81.3649 69.7246 81.1709ZM68.6934 80.5059C68.9473 80.6727 69.2026 80.8388 69.46 81.0029C69.2026 80.8388 68.9473 80.6727 68.6934 80.5059ZM67.4248 79.6543C67.7521 79.88 68.0834 80.1026 68.417 80.3242C68.0834 80.1026 67.7521 79.8799 67.4248 79.6543ZM111.453 77.3633C110.85 78.0734 110.241 78.7424 109.628 79.373C110.241 78.7424 110.85 78.0734 111.453 77.3633ZM65.4385 78.2334C65.6968 78.4244 65.9577 78.6143 66.2207 78.8037C65.9577 78.6144 65.6968 78.4244 65.4385 78.2334ZM63.3633 76.6455C63.9735 77.1287 64.6005 77.6101 65.2422 78.0879C64.6005 77.6101 63.9735 77.1287 63.3633 76.6455ZM117.652 66.1729C116.566 69.1767 114.944 72.3987 112.683 75.8506C112.287 76.3589 111.888 76.8481 111.488 77.3203C111.888 76.8482 112.288 76.3598 112.684 75.8516C114.945 72.3995 116.566 69.1769 117.652 66.1729ZM62.4883 75.9414C62.6975 76.1117 62.9087 76.2819 63.1221 76.4521C62.9087 76.2819 62.6975 76.1116 62.4883 75.9414ZM61.5498 75.167C61.7759 75.3563 62.0049 75.5456 62.2363 75.7354C62.0049 75.5456 61.7759 75.3563 61.5498 75.167ZM59.7852 73.6504C60.3037 74.108 60.8401 74.5703 61.3926 75.0352C60.8401 74.5703 60.3037 74.108 59.7852 73.6504ZM58.9414 72.8965C59.1317 73.0686 59.325 73.2412 59.5205 73.415C59.325 73.2412 59.1317 73.0686 58.9414 72.8965ZM58.4268 72.4258C58.5335 72.5238 58.6405 72.623 58.749 72.7217C58.6405 72.623 58.5335 72.5238 58.4268 72.4258ZM57.3203 71.3955C57.3688 71.4414 57.4179 71.4871 57.4668 71.5332C57.4179 71.4871 57.3688 71.4414 57.3203 71.3955ZM56.1279 70.2461C56.1812 70.2984 56.2351 70.3506 56.2891 70.4033C56.2351 70.3506 56.1812 70.2984 56.1279 70.2461ZM54.0596 68.1553C54.096 68.1933 54.133 68.2312 54.1699 68.2695C54.133 68.2312 54.096 68.1933 54.0596 68.1553ZM52.998 67.0293C53.2438 67.2943 53.5071 67.5729 53.7852 67.8652C53.5071 67.5729 53.2438 67.2943 52.998 67.0293ZM52.1895 66.1445C52.3309 66.3015 52.4811 66.4657 52.6387 66.6377C52.4811 66.4657 52.3309 66.3015 52.1895 66.1445ZM51.4814 65.3486C51.6046 65.4893 51.7386 65.6408 51.8828 65.8027C51.7386 65.6408 51.6047 65.4893 51.4814 65.3486ZM117.953 65.3027C118.008 65.1367 118.061 64.9713 118.113 64.8066C118.061 64.9713 118.008 65.1367 117.953 65.3027ZM118.15 64.6895C118.206 64.5102 118.26 64.3319 118.312 64.1543C118.26 64.3319 118.206 64.5103 118.15 64.6895ZM118.346 64.0342C118.396 63.8582 118.445 63.6832 118.492 63.5088C118.445 63.6832 118.396 63.8582 118.346 64.0342ZM118.956 61.5068C118.836 62.1256 118.692 62.7546 118.522 63.3945C118.692 62.7546 118.836 62.1256 118.956 61.5068ZM119.079 60.8203C119.109 60.6446 119.136 60.4698 119.161 60.2959C119.136 60.4698 119.109 60.6447 119.079 60.8203ZM119.371 58.3691C119.331 58.9482 119.269 59.5372 119.185 60.1367C119.269 59.5372 119.331 58.9482 119.371 58.3691ZM119.423 57.1055C119.425 56.9504 119.426 56.7961 119.425 56.6426C119.426 56.7961 119.425 56.9504 119.423 57.1055ZM119.227 53.8086C119.347 54.6929 119.416 55.6051 119.425 56.5459C119.415 55.6051 119.348 54.693 119.227 53.8086ZM119.207 53.6748C119.188 53.545 119.169 53.4157 119.148 53.2871C119.169 53.4157 119.188 53.545 119.207 53.6748ZM118.935 52.1592C118.86 51.8191 118.777 51.4837 118.687 51.1523C118.777 51.4837 118.86 51.8191 118.935 52.1592ZM118.65 51.0234C118.618 50.9068 118.585 50.7904 118.551 50.6748C118.585 50.7904 118.618 50.9068 118.65 51.0234ZM118.354 50.0508C118.314 49.932 118.274 49.8138 118.232 49.6963C118.274 49.8138 118.314 49.932 118.354 50.0508ZM117.181 47.2217C117.118 47.0961 117.053 46.9717 116.988 46.8477C117.053 46.9717 117.118 47.0961 117.181 47.2217ZM116.949 46.7725C116.888 46.6562 116.825 46.5407 116.762 46.4258C116.825 46.5407 116.888 46.6562 116.949 46.7725ZM83.3877 46.6064C83.3803 46.6321 83.3726 46.6578 83.3652 46.6836C83.3726 46.6578 83.3803 46.6321 83.3877 46.6064ZM115.979 45.1113C116.235 45.5096 116.479 45.9164 116.711 46.332C116.479 45.9164 116.235 45.5096 115.979 45.1113ZM115.812 44.8555C115.78 44.8065 115.747 44.7577 115.715 44.709C115.747 44.7577 115.78 44.8065 115.812 44.8555ZM115.616 44.5615C115.554 44.4694 115.49 44.3783 115.426 44.2871C115.49 44.3783 115.554 44.4694 115.616 44.5615ZM115.335 44.1582C115.304 44.115 115.273 44.0723 115.242 44.0293C115.273 44.0723 115.304 44.115 115.335 44.1582ZM84.4297 43.4863C84.408 43.5422 84.3868 43.5986 84.3652 43.6553C84.3868 43.5986 84.408 43.5422 84.4297 43.4863ZM114.291 42.7881C114.261 42.7508 114.231 42.7129 114.2 42.6758C114.231 42.7129 114.261 42.7508 114.291 42.7881ZM113.729 42.1201C113.692 42.0771 113.655 42.034 113.617 41.9912C113.655 42.034 113.692 42.0771 113.729 42.1201ZM113.124 41.4443C113.102 41.4205 113.08 41.3968 113.058 41.373C113.08 41.3968 113.102 41.4205 113.124 41.4443ZM111.94 40.2373C111.918 40.2156 111.896 40.1936 111.873 40.1719C111.896 40.1936 111.918 40.2155 111.94 40.2373ZM111.59 39.9062C111.445 39.7705 111.299 39.6358 111.152 39.5029C111.299 39.6358 111.445 39.7705 111.59 39.9062ZM110.883 39.2627C110.751 39.1459 110.619 39.0295 110.485 38.915C110.619 39.0295 110.751 39.1459 110.883 39.2627ZM110.118 38.6045C110.003 38.5084 109.887 38.4138 109.771 38.3193C109.887 38.4138 110.003 38.5084 110.118 38.6045ZM109.427 38.042C109.308 37.9477 109.188 37.8553 109.068 37.7627C109.188 37.8553 109.308 37.9477 109.427 38.042ZM96.6738 37.6777L96.6758 37.6797L92.6533 31.4668L96.6738 37.6777ZM96.6006 37.6084C96.5459 37.5553 96.4908 37.5016 96.4336 37.4492C96.4908 37.5016 96.546 37.5552 96.6006 37.6084ZM96.3174 37.3467C96.2669 37.3023 96.2154 37.2584 96.1631 37.2148C96.2154 37.2584 96.2669 37.3023 96.3174 37.3467ZM96.0684 37.1357C95.9781 37.0629 95.8852 36.9917 95.79 36.9219C95.8852 36.9917 95.9781 37.0629 96.0684 37.1357ZM88.5117 37.0605C88.5006 37.0698 88.4897 37.0795 88.4785 37.0889C88.4897 37.0795 88.5006 37.0698 88.5117 37.0605ZM95.7217 36.873C95.6462 36.819 95.5695 36.7657 95.4912 36.7139C95.5695 36.7657 95.6462 36.8189 95.7217 36.873ZM88.8135 36.8223C88.8022 36.8307 88.7916 36.8401 88.7803 36.8486C88.7916 36.8401 88.8022 36.8307 88.8135 36.8223ZM107.59 36.6719C107.487 36.5995 107.385 36.5263 107.281 36.4551C107.385 36.5263 107.487 36.5995 107.59 36.6719ZM95.375 36.6387C95.2892 36.5842 95.2021 36.5308 95.1133 36.4795C95.2021 36.5308 95.2892 36.5842 95.375 36.6387ZM89.4521 36.3994C89.4353 36.4092 89.4182 36.4187 89.4014 36.4287C89.4182 36.4187 89.4353 36.4092 89.4521 36.3994ZM95.0049 36.4189C94.9234 36.3738 94.8407 36.3302 94.7568 36.2881C94.8407 36.3302 94.9234 36.3738 95.0049 36.4189ZM89.7568 36.2324C89.7331 36.2446 89.7093 36.257 89.6855 36.2695C89.7093 36.257 89.7331 36.2446 89.7568 36.2324ZM94.6152 36.2197C94.5385 36.1834 94.4613 36.1478 94.3828 36.1143C94.4613 36.1478 94.5385 36.1834 94.6152 36.2197ZM106.882 36.1846C106.777 36.1138 106.672 36.0432 106.566 35.9736C106.672 36.0432 106.777 36.1138 106.882 36.1846ZM94.2783 36.0693C94.1692 36.025 94.0584 35.9837 93.9463 35.9453C94.0585 35.9837 94.1692 36.025 94.2783 36.0693ZM90.6523 35.8672C90.6459 35.8692 90.6393 35.871 90.6328 35.873C90.6393 35.871 90.6459 35.8692 90.6523 35.8672ZM93.3721 35.7803C93.3668 35.7791 93.3617 35.7776 93.3564 35.7764C93.3617 35.7776 93.3668 35.7791 93.3721 35.7803ZM106.18 35.7217C106.036 35.6291 105.893 35.5377 105.749 35.4473C105.893 35.5377 106.036 35.6291 106.18 35.7217ZM92.7568 35.6738C92.7464 35.6726 92.736 35.6711 92.7256 35.6699C92.736 35.6711 92.7464 35.6726 92.7568 35.6738ZM92.4375 35.6465C92.4333 35.6463 92.429 35.6457 92.4248 35.6455C92.4228 35.6454 92.4209 35.6446 92.4189 35.6445C92.4252 35.6448 92.4313 35.6462 92.4375 35.6465ZM92.1064 35.6396C92.1201 35.6395 92.1338 35.6387 92.1475 35.6387C92.1338 35.6387 92.1201 35.6395 92.1064 35.6396ZM105.454 35.2627C105.327 35.1837 105.199 35.1056 105.071 35.0283C105.199 35.1056 105.327 35.1837 105.454 35.2627ZM104.67 34.7871C104.562 34.7233 104.454 34.6603 104.347 34.5977C104.454 34.6603 104.562 34.7233 104.67 34.7871ZM103.922 34.3525C103.786 34.2754 103.65 34.2003 103.515 34.125C103.65 34.2003 103.786 34.2754 103.922 34.3525ZM102.998 33.8408C102.825 33.7471 102.653 33.6542 102.48 33.5635C102.653 33.6542 102.825 33.7471 102.998 33.8408ZM102.21 33.4229C102.076 33.3534 101.943 33.2844 101.811 33.2168C101.943 33.2844 102.076 33.3534 102.21 33.4229ZM101.261 32.9404C101.232 32.9261 101.203 32.9117 101.174 32.8975C101.203 32.9117 101.232 32.9261 101.261 32.9404ZM100.657 32.6465C100.55 32.595 100.443 32.5444 100.337 32.4941C100.443 32.5444 100.55 32.595 100.657 32.6465ZM100.032 32.3506C99.8866 32.2828 99.7415 32.2168 99.5977 32.1514C99.7415 32.2168 99.8866 32.2828 100.032 32.3506ZM99.3203 32.0254C99.1685 31.9573 99.0177 31.8908 98.8682 31.8252C99.0177 31.8908 99.1685 31.9573 99.3203 32.0254ZM96.9688 31.0312C96.9094 31.0076 96.8508 30.9831 96.792 30.96C96.8508 30.9831 96.9094 31.0076 96.9688 31.0312ZM96.2197 30.7402C96.0084 30.6594 95.8023 30.5805 95.6006 30.5059C95.8023 30.5805 96.0084 30.6594 96.2197 30.7402ZM95.0645 30.3115C94.9645 30.2756 94.8666 30.2384 94.7695 30.2041C94.6916 30.1766 94.614 30.1514 94.5381 30.125C94.7087 30.1844 94.8842 30.2468 95.0645 30.3115ZM93.8115 29.8779C93.75 29.8574 93.6897 29.8361 93.6299 29.8164C93.5751 29.7984 93.521 29.781 93.4678 29.7637C93.5792 29.8 93.6936 29.8387 93.8115 29.8779ZM93.123 29.6523C92.954 29.5986 92.7939 29.5491 92.6436 29.5029C92.7939 29.5491 92.954 29.5986 93.123 29.6523ZM91.5459 29.1816C91.5308 29.1775 91.5163 29.1729 91.502 29.1689C91.4807 29.1631 91.4601 29.1577 91.4404 29.1523C91.4734 29.1613 91.5085 29.1713 91.5459 29.1816ZM94.7031 87.7305C94.9125 87.6938 95.1218 87.6546 95.3311 87.6123C95.1218 87.6546 94.9124 87.6938 94.7031 87.7305ZM100.021 86.1543C100.218 86.0706 100.416 85.9851 100.612 85.8955C100.416 85.9851 100.218 86.0706 100.021 86.1543ZM101.963 85.2314C102.166 85.124 102.369 85.0126 102.572 84.8984C102.369 85.0126 102.166 85.124 101.963 85.2314ZM66.4297 78.9541C66.7366 79.1735 67.0463 79.392 67.3594 79.6084C67.0463 79.392 66.7366 79.1735 66.4297 78.9541ZM117.663 66.1426C117.74 65.9289 117.814 65.7163 117.886 65.5049C117.814 65.7163 117.74 65.9289 117.663 66.1426ZM118.975 61.4062C119.011 61.2174 119.045 61.0297 119.076 60.8428C119.045 61.0297 119.011 61.2174 118.975 61.4062ZM119.374 58.3262C119.386 58.1485 119.396 57.9717 119.403 57.7959C119.396 57.9717 119.386 58.1485 119.374 58.3262ZM119.406 57.6973C119.413 57.5264 119.419 57.3565 119.422 57.1875C119.419 57.3565 119.413 57.5264 119.406 57.6973ZM119.129 53.1738C119.103 53.0197 119.076 52.8663 119.047 52.7139C119.076 52.8663 119.103 53.0197 119.129 53.1738ZM119.034 52.6465C119.002 52.4831 118.97 52.3206 118.935 52.1592C118.97 52.3206 119.002 52.4831 119.034 52.6465ZM118.505 50.5234C118.466 50.3961 118.425 50.2696 118.384 50.1436C118.425 50.2696 118.466 50.3961 118.505 50.5234ZM117.407 47.6885C117.343 47.5529 117.278 47.418 117.212 47.2842C117.278 47.418 117.343 47.5529 117.407 47.6885Z" fill="url(#paint0_linear_8320_6496)"/>
+<path d="M85.5938 47.5303C90.5412 47.5304 94.6347 51.1781 95.3359 55.9307C97.5821 63.3548 87.0285 72.2705 77.0967 72.2705C68.355 72.2704 53.9448 65.7423 59.8584 59.957C63.0274 56.8569 66.8375 59.1741 70.9404 57.4951C73.6527 56.3852 75.184 54.3494 76.9297 52.6885C78.5972 49.616 81.8522 47.5303 85.5938 47.5303Z" fill="#A78F72"/>
+<path d="M107.659 54.0695C105.619 54.0695 103.965 52.4157 103.965 50.3756C103.965 48.3355 105.619 46.6816 107.659 46.6816C109.699 46.6816 111.353 48.3355 111.353 50.3756C111.353 52.4157 109.699 54.0695 107.659 54.0695Z" fill="#161619"/>
+</g>
+<path d="M161.031 60.531L153.531 68.031C153.461 68.1007 153.378 68.156 153.287 68.1937C153.196 68.2314 153.098 68.2508 153 68.2508C152.901 68.2508 152.804 68.2314 152.713 68.1937C152.622 68.156 152.539 68.1007 152.469 68.031C152.4 67.9614 152.344 67.8786 152.307 67.7876C152.269 67.6965 152.25 67.599 152.25 67.5004C152.25 67.4019 152.269 67.3043 152.307 67.2132C152.344 67.1222 152.4 67.0395 152.469 66.9698L159.44 60.0004L152.469 53.031C152.329 52.8903 152.25 52.6994 152.25 52.5004C152.25 52.3014 152.329 52.1105 152.469 51.9698C152.61 51.8291 152.801 51.75 153 51.75C153.199 51.75 153.39 51.8291 153.531 51.9698L161.031 59.4698C161.1 59.5394 161.156 59.6222 161.193 59.7132C161.231 59.8043 161.251 59.9019 161.251 60.0004C161.251 60.099 161.231 60.1966 161.193 60.2876C161.156 60.3787 161.1 60.4614 161.031 60.531Z" fill="#404040"/>
+<path d="M173.031 60.531L165.531 68.031C165.461 68.1007 165.378 68.156 165.287 68.1937C165.196 68.2314 165.098 68.2508 165 68.2508C164.901 68.2508 164.804 68.2314 164.713 68.1937C164.622 68.156 164.539 68.1007 164.469 68.031C164.4 67.9614 164.344 67.8786 164.307 67.7876C164.269 67.6965 164.25 67.599 164.25 67.5004C164.25 67.4019 164.269 67.3043 164.307 67.2132C164.344 67.1222 164.4 67.0395 164.469 66.9698L171.44 60.0004L164.469 53.031C164.329 52.8903 164.25 52.6994 164.25 52.5004C164.25 52.3014 164.329 52.1105 164.469 51.9698C164.61 51.8291 164.801 51.75 165 51.75C165.199 51.75 165.39 51.8291 165.531 51.9698L173.031 59.4698C173.1 59.5394 173.156 59.6222 173.193 59.7132C173.231 59.8043 173.251 59.9019 173.251 60.0004C173.251 60.099 173.231 60.1966 173.193 60.2876C173.156 60.3787 173.1 60.4614 173.031 60.531Z" fill="#404040"/>
+<path d="M185.031 60.531L177.531 68.031C177.461 68.1007 177.378 68.156 177.287 68.1937C177.196 68.2314 177.098 68.2508 177 68.2508C176.901 68.2508 176.804 68.2314 176.713 68.1937C176.622 68.156 176.539 68.1007 176.469 68.031C176.4 67.9614 176.344 67.8786 176.307 67.7876C176.269 67.6965 176.25 67.599 176.25 67.5004C176.25 67.4019 176.269 67.3043 176.307 67.2132C176.344 67.1222 176.4 67.0395 176.469 66.9698L183.44 60.0004L176.469 53.031C176.329 52.8903 176.25 52.6994 176.25 52.5004C176.25 52.3014 176.329 52.1105 176.469 51.9698C176.61 51.8291 176.801 51.75 177 51.75C177.199 51.75 177.39 51.8291 177.531 51.9698L185.031 59.4698C185.1 59.5394 185.156 59.6222 185.193 59.7132C185.231 59.8043 185.251 59.9019 185.251 60.0004C185.251 60.099 185.231 60.1966 185.193 60.2876C185.156 60.3787 185.1 60.4614 185.031 60.531Z" fill="#404040"/>
+<path d="M222.969 60.531L230.469 68.031C230.539 68.1007 230.622 68.156 230.713 68.1937C230.804 68.2314 230.902 68.2508 231 68.2508C231.099 68.2508 231.196 68.2314 231.287 68.1937C231.378 68.156 231.461 68.1007 231.531 68.031C231.6 67.9614 231.656 67.8786 231.693 67.7876C231.731 67.6965 231.75 67.599 231.75 67.5004C231.75 67.4019 231.731 67.3043 231.693 67.2132C231.656 67.1222 231.6 67.0395 231.531 66.9698L224.56 60.0004L231.531 53.031C231.671 52.8903 231.75 52.6994 231.75 52.5004C231.75 52.3014 231.671 52.1105 231.531 51.9698C231.39 51.8291 231.199 51.75 231 51.75C230.801 51.75 230.61 51.8291 230.469 51.9698L222.969 59.4698C222.9 59.5394 222.844 59.6222 222.807 59.7132C222.769 59.8043 222.749 59.9019 222.749 60.0004C222.749 60.099 222.769 60.1966 222.807 60.2876C222.844 60.3787 222.9 60.4614 222.969 60.531Z" fill="#404040"/>
+<path d="M210.969 60.531L218.469 68.031C218.539 68.1007 218.622 68.156 218.713 68.1937C218.804 68.2314 218.902 68.2508 219 68.2508C219.099 68.2508 219.196 68.2314 219.287 68.1937C219.378 68.156 219.461 68.1007 219.531 68.031C219.6 67.9614 219.656 67.8786 219.693 67.7876C219.731 67.6965 219.75 67.599 219.75 67.5004C219.75 67.4019 219.731 67.3043 219.693 67.2132C219.656 67.1222 219.6 67.0395 219.531 66.9698L212.56 60.0004L219.531 53.031C219.671 52.8903 219.75 52.6994 219.75 52.5004C219.75 52.3014 219.671 52.1105 219.531 51.9698C219.39 51.8291 219.199 51.75 219 51.75C218.801 51.75 218.61 51.8291 218.469 51.9698L210.969 59.4698C210.9 59.5394 210.844 59.6222 210.807 59.7132C210.769 59.8043 210.749 59.9019 210.749 60.0004C210.749 60.099 210.769 60.1966 210.807 60.2876C210.844 60.3787 210.9 60.4614 210.969 60.531Z" fill="#404040"/>
+<path d="M198.969 60.531L206.469 68.031C206.539 68.1007 206.622 68.156 206.713 68.1937C206.804 68.2314 206.902 68.2508 207 68.2508C207.099 68.2508 207.196 68.2314 207.287 68.1937C207.378 68.156 207.461 68.1007 207.531 68.031C207.6 67.9614 207.656 67.8786 207.693 67.7876C207.731 67.6965 207.75 67.599 207.75 67.5004C207.75 67.4019 207.731 67.3043 207.693 67.2132C207.656 67.1222 207.6 67.0395 207.531 66.9698L200.56 60.0004L207.531 53.031C207.671 52.8903 207.75 52.6994 207.75 52.5004C207.75 52.3014 207.671 52.1105 207.531 51.9698C207.39 51.8291 207.199 51.75 207 51.75C206.801 51.75 206.61 51.8291 206.469 51.9698L198.969 59.4698C198.9 59.5394 198.844 59.6222 198.807 59.7132C198.769 59.8043 198.749 59.9019 198.749 60.0004C198.749 60.099 198.769 60.1966 198.807 60.2876C198.844 60.3787 198.9 60.4614 198.969 60.531Z" fill="#404040"/>
+<g filter="url(#filter1_d_8320_6496)">
+<path d="M299.248 58.001H283.249L269.251 72.0021L277.249 80.0003L299.248 58.001Z" fill="#54C5F8"/>
+<path d="M265.252 68.0016L257.25 60.0001L283.25 34H299.25L265.252 68.0016Z" fill="#54C5F8"/>
+<path d="M277.25 80.0001L283.25 85.9996H299.25L285.249 72.002L277.25 80.0001Z" fill="#01579B"/>
+<path d="M277.25 80.0001L289.116 75.8926L285.249 72.002L277.25 80.0001Z" fill="url(#paint1_linear_8320_6496)"/>
+<path d="M277.249 64L269.251 71.9984L277.249 79.9969L285.248 71.9984L277.249 64Z" fill="#29B6F6"/>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_8320_6496" x="12" y="-8" width="144" height="144" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dx="-4" dy="4"/>
+<feGaussianBlur stdDeviation="16"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.32 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_8320_6496"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_8320_6496" result="shape"/>
+</filter>
+<filter id="filter1_d_8320_6496" x="217.25" y="-2" width="122" height="132" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="20"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_8320_6496"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_8320_6496" result="shape"/>
+</filter>
+<linearGradient id="paint0_linear_8320_6496" x1="78.1437" y1="52.6005" x2="111.609" y2="81.9341" gradientUnits="userSpaceOnUse">
+<stop stop-color="#D1C2B0"/>
+<stop offset="1" stop-color="#FBEDDD"/>
+</linearGradient>
+<linearGradient id="paint1_linear_8320_6496" x1="279.583" y1="81.5447" x2="285.541" y2="75.5862" gradientUnits="userSpaceOnUse">
+<stop stop-color="#1A237E" stop-opacity="0.4"/>
+<stop offset="1" stop-color="#1A237E" stop-opacity="0"/>
+</linearGradient>
+<clipPath id="clip0_8320_6496">
+<rect width="360" height="120" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/blog/covers/1.0-cover.png b/src/assets/blog/covers/1.0-cover.png
deleted file mode 100644
index 92e48eb7..00000000
Binary files a/src/assets/blog/covers/1.0-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/1.avif b/src/assets/blog/covers/1.avif
new file mode 100644
index 00000000..8f548979
Binary files /dev/null and b/src/assets/blog/covers/1.avif differ
diff --git a/src/assets/blog/covers/2025-year-in-review.avif b/src/assets/blog/covers/2025-year-in-review.avif
new file mode 100644
index 00000000..fcd771f7
Binary files /dev/null and b/src/assets/blog/covers/2025-year-in-review.avif differ
diff --git a/src/assets/blog/covers/2025-year-in-review.png b/src/assets/blog/covers/2025-year-in-review.png
deleted file mode 100644
index 1f35f155..00000000
Binary files a/src/assets/blog/covers/2025-year-in-review.png and /dev/null differ
diff --git a/src/assets/blog/covers/FlutterNotDeadYet.png b/src/assets/blog/covers/FlutterNotDeadYet.png
deleted file mode 100644
index 0b5e0bdd..00000000
Binary files a/src/assets/blog/covers/FlutterNotDeadYet.png and /dev/null differ
diff --git a/src/assets/blog/covers/advanced-permissions.png b/src/assets/blog/covers/advanced-permissions.png
new file mode 100644
index 00000000..0b846a99
Binary files /dev/null and b/src/assets/blog/covers/advanced-permissions.png differ
diff --git a/src/assets/blog/covers/ai-intent-cross-platform-app-development.png b/src/assets/blog/covers/ai-intent-cross-platform-app-development.png
new file mode 100644
index 00000000..ad4858f7
Binary files /dev/null and b/src/assets/blog/covers/ai-intent-cross-platform-app-development.png differ
diff --git a/src/assets/blog/covers/brand-refresh-cover.png b/src/assets/blog/covers/brand-refresh-cover.png
deleted file mode 100644
index 898c9fe3..00000000
Binary files a/src/assets/blog/covers/brand-refresh-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/brand-refresh.png b/src/assets/blog/covers/brand-refresh.png
new file mode 100644
index 00000000..8bcb26b5
Binary files /dev/null and b/src/assets/blog/covers/brand-refresh.png differ
diff --git a/src/assets/blog/covers/building-good-software.png b/src/assets/blog/covers/building-good-software.png
index 4665aeb9..4a123664 100644
Binary files a/src/assets/blog/covers/building-good-software.png and b/src/assets/blog/covers/building-good-software.png differ
diff --git a/src/assets/blog/covers/buy-dont-build-cover.png b/src/assets/blog/covers/buy-dont-build-cover.png
deleted file mode 100644
index 34654d45..00000000
Binary files a/src/assets/blog/covers/buy-dont-build-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/buy-dont-build.avif b/src/assets/blog/covers/buy-dont-build.avif
new file mode 100644
index 00000000..69243b3b
Binary files /dev/null and b/src/assets/blog/covers/buy-dont-build.avif differ
diff --git a/src/assets/blog/covers/characteristics-portable-software.png b/src/assets/blog/covers/characteristics-portable-software.png
new file mode 100644
index 00000000..ad2fe844
Binary files /dev/null and b/src/assets/blog/covers/characteristics-portable-software.png differ
diff --git a/src/assets/blog/covers/cloud-infra-improvements.png b/src/assets/blog/covers/cloud-infra-improvements.png
new file mode 100644
index 00000000..a6be6e87
Binary files /dev/null and b/src/assets/blog/covers/cloud-infra-improvements.png differ
diff --git a/src/assets/blog/covers/code-push-makes-your-app-more-secure-not-less.png b/src/assets/blog/covers/code-push-makes-your-app-more-secure-not-less.png
new file mode 100644
index 00000000..5ccb8673
Binary files /dev/null and b/src/assets/blog/covers/code-push-makes-your-app-more-secure-not-less.png differ
diff --git a/src/assets/blog/covers/code-push-v2-cover.png b/src/assets/blog/covers/code-push-v2-cover.png
deleted file mode 100644
index 8499abec..00000000
Binary files a/src/assets/blog/covers/code-push-v2-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/codemagic-cover.png b/src/assets/blog/covers/codemagic-cover.png
deleted file mode 100644
index 5c9d5cf1..00000000
Binary files a/src/assets/blog/covers/codemagic-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/custom-tracks-cover.png b/src/assets/blog/covers/custom-tracks-cover.png
deleted file mode 100644
index c5640729..00000000
Binary files a/src/assets/blog/covers/custom-tracks-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/custom-tracks.avif b/src/assets/blog/covers/custom-tracks.avif
new file mode 100644
index 00000000..dd3295e7
Binary files /dev/null and b/src/assets/blog/covers/custom-tracks.avif differ
diff --git a/src/assets/blog/covers/dart-3-5-0.avif b/src/assets/blog/covers/dart-3-5-0.avif
new file mode 100644
index 00000000..5686080d
Binary files /dev/null and b/src/assets/blog/covers/dart-3-5-0.avif differ
diff --git a/src/assets/blog/covers/dart-3.5-cover.png b/src/assets/blog/covers/dart-3.5-cover.png
deleted file mode 100644
index 11a15edb..00000000
Binary files a/src/assets/blog/covers/dart-3.5-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/dart-macros-cover.png b/src/assets/blog/covers/dart-macros-cover.png
deleted file mode 100644
index e8461ad3..00000000
Binary files a/src/assets/blog/covers/dart-macros-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/dart-macros.avif b/src/assets/blog/covers/dart-macros.avif
new file mode 100644
index 00000000..4f8fa09f
Binary files /dev/null and b/src/assets/blog/covers/dart-macros.avif differ
diff --git a/src/assets/blog/covers/dawn-joins-shorebird-cover.png b/src/assets/blog/covers/dawn-joins-shorebird-cover.png
deleted file mode 100644
index f82b7cb1..00000000
Binary files a/src/assets/blog/covers/dawn-joins-shorebird-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/desktop-in-production.avif b/src/assets/blog/covers/desktop-in-production.avif
new file mode 100644
index 00000000..5a467623
Binary files /dev/null and b/src/assets/blog/covers/desktop-in-production.avif differ
diff --git a/src/assets/blog/covers/development-workflow-cover.png b/src/assets/blog/covers/development-workflow-cover.png
deleted file mode 100644
index d238c4df..00000000
Binary files a/src/assets/blog/covers/development-workflow-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/development-workflow.avif b/src/assets/blog/covers/development-workflow.avif
new file mode 100644
index 00000000..4fdf5485
Binary files /dev/null and b/src/assets/blog/covers/development-workflow.avif differ
diff --git a/src/assets/blog/covers/exploring-shorebird-samples.png b/src/assets/blog/covers/exploring-shorebird-samples.png
new file mode 100644
index 00000000..7289ada9
Binary files /dev/null and b/src/assets/blog/covers/exploring-shorebird-samples.png differ
diff --git a/src/assets/blog/covers/flutter-3-32-release.png b/src/assets/blog/covers/flutter-3-32-release.png
new file mode 100644
index 00000000..4a123664
Binary files /dev/null and b/src/assets/blog/covers/flutter-3-32-release.png differ
diff --git a/src/assets/blog/covers/flutter-3.32-cover.png b/src/assets/blog/covers/flutter-3.32-cover.png
deleted file mode 100644
index 3f5d9c1b..00000000
Binary files a/src/assets/blog/covers/flutter-3.32-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/flutter-jobs-cover.png b/src/assets/blog/covers/flutter-jobs-cover.png
deleted file mode 100644
index 8e619daf..00000000
Binary files a/src/assets/blog/covers/flutter-jobs-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/flutter-jobs.avif b/src/assets/blog/covers/flutter-jobs.avif
new file mode 100644
index 00000000..54296f0b
Binary files /dev/null and b/src/assets/blog/covers/flutter-jobs.avif differ
diff --git a/src/assets/blog/covers/flutter-not-dead.avif b/src/assets/blog/covers/flutter-not-dead.avif
new file mode 100644
index 00000000..bea89911
Binary files /dev/null and b/src/assets/blog/covers/flutter-not-dead.avif differ
diff --git a/src/assets/blog/covers/flutter-vs-dotnet-maui-architecture-tooling-deployment.png b/src/assets/blog/covers/flutter-vs-dotnet-maui-architecture-tooling-deployment.png
new file mode 100644
index 00000000..5ba5439d
Binary files /dev/null and b/src/assets/blog/covers/flutter-vs-dotnet-maui-architecture-tooling-deployment.png differ
diff --git a/src/assets/blog/covers/flutter-vs-kotlin-multiplatform.png b/src/assets/blog/covers/flutter-vs-kotlin-multiplatform.png
new file mode 100644
index 00000000..0e6693df
Binary files /dev/null and b/src/assets/blog/covers/flutter-vs-kotlin-multiplatform.png differ
diff --git a/src/assets/blog/covers/flutter-vs-react-native.png b/src/assets/blog/covers/flutter-vs-react-native.png
new file mode 100644
index 00000000..258488c2
Binary files /dev/null and b/src/assets/blog/covers/flutter-vs-react-native.png differ
diff --git a/src/assets/blog/covers/flutter-web-is-misunderstood.png b/src/assets/blog/covers/flutter-web-is-misunderstood.png
new file mode 100644
index 00000000..209d83ab
Binary files /dev/null and b/src/assets/blog/covers/flutter-web-is-misunderstood.png differ
diff --git a/src/assets/blog/covers/flutterconusa-2025-cover.png b/src/assets/blog/covers/flutterconusa-2025-cover.png
deleted file mode 100644
index 3c55f39c..00000000
Binary files a/src/assets/blog/covers/flutterconusa-2025-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/flutterconusa-2025-sponsor.png b/src/assets/blog/covers/flutterconusa-2025-sponsor.png
new file mode 100644
index 00000000..250fc219
Binary files /dev/null and b/src/assets/blog/covers/flutterconusa-2025-sponsor.png differ
diff --git a/src/assets/blog/covers/growing-cover.png b/src/assets/blog/covers/growing-cover.png
deleted file mode 100644
index c0f6bf52..00000000
Binary files a/src/assets/blog/covers/growing-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/how-many-patches-cover.png b/src/assets/blog/covers/how-many-patches-cover.png
deleted file mode 100644
index ceb17432..00000000
Binary files a/src/assets/blog/covers/how-many-patches-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/how-many-patches.png b/src/assets/blog/covers/how-many-patches.png
new file mode 100644
index 00000000..7a34a58d
Binary files /dev/null and b/src/assets/blog/covers/how-many-patches.png differ
diff --git a/src/assets/blog/covers/how-we-built-code-push-cover.png b/src/assets/blog/covers/how-we-built-code-push-cover.png
deleted file mode 100644
index 819c28d8..00000000
Binary files a/src/assets/blog/covers/how-we-built-code-push-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/how-we-built-code-push.png b/src/assets/blog/covers/how-we-built-code-push.png
new file mode 100644
index 00000000..98013a37
Binary files /dev/null and b/src/assets/blog/covers/how-we-built-code-push.png differ
diff --git a/src/assets/blog/covers/improved-cloud-infra-cover.png b/src/assets/blog/covers/improved-cloud-infra-cover.png
deleted file mode 100644
index 9828b2f6..00000000
Binary files a/src/assets/blog/covers/improved-cloud-infra-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/improved-patch-delivery-cover.png b/src/assets/blog/covers/improved-patch-delivery-cover.png
deleted file mode 100644
index 20aa7adc..00000000
Binary files a/src/assets/blog/covers/improved-patch-delivery-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/improved-patch-delivery.png b/src/assets/blog/covers/improved-patch-delivery.png
new file mode 100644
index 00000000..84dd56cd
Binary files /dev/null and b/src/assets/blog/covers/improved-patch-delivery.png differ
diff --git a/src/assets/blog/covers/introducing-mission-control.png b/src/assets/blog/covers/introducing-mission-control.png
new file mode 100644
index 00000000..27d38d55
Binary files /dev/null and b/src/assets/blog/covers/introducing-mission-control.png differ
diff --git a/src/assets/blog/covers/introducing-shorebird-ci-cover.png b/src/assets/blog/covers/introducing-shorebird-ci-cover.png
deleted file mode 100644
index d2b4708a..00000000
Binary files a/src/assets/blog/covers/introducing-shorebird-ci-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/introducing-shorebird-ci.png b/src/assets/blog/covers/introducing-shorebird-ci.png
new file mode 100644
index 00000000..c6adfcfc
Binary files /dev/null and b/src/assets/blog/covers/introducing-shorebird-ci.png differ
diff --git a/src/assets/blog/covers/introducing-shorebirds-upgraded-auth-service.png b/src/assets/blog/covers/introducing-shorebirds-upgraded-auth-service.png
new file mode 100644
index 00000000..8f6c0711
Binary files /dev/null and b/src/assets/blog/covers/introducing-shorebirds-upgraded-auth-service.png differ
diff --git a/src/assets/blog/covers/ios-beta-cover.png b/src/assets/blog/covers/ios-beta-cover.png
deleted file mode 100644
index 1fde6de8..00000000
Binary files a/src/assets/blog/covers/ios-beta-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/ios-beta.avif b/src/assets/blog/covers/ios-beta.avif
new file mode 100644
index 00000000..e5e8b70e
Binary files /dev/null and b/src/assets/blog/covers/ios-beta.avif differ
diff --git a/src/assets/blog/covers/keep-your-flutter-version-current.png b/src/assets/blog/covers/keep-your-flutter-version-current.png
new file mode 100644
index 00000000..61746cc9
Binary files /dev/null and b/src/assets/blog/covers/keep-your-flutter-version-current.png differ
diff --git a/src/assets/blog/covers/macos-beta-cover.png b/src/assets/blog/covers/macos-beta-cover.png
deleted file mode 100644
index 1fde6de8..00000000
Binary files a/src/assets/blog/covers/macos-beta-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/macos-beta.avif b/src/assets/blog/covers/macos-beta.avif
new file mode 100644
index 00000000..e5e8b70e
Binary files /dev/null and b/src/assets/blog/covers/macos-beta.avif differ
diff --git a/src/assets/blog/covers/making-the-shorebird-cli-agentic.png b/src/assets/blog/covers/making-the-shorebird-cli-agentic.png
new file mode 100644
index 00000000..768aa85b
Binary files /dev/null and b/src/assets/blog/covers/making-the-shorebird-cli-agentic.png differ
diff --git a/src/assets/blog/covers/manual-control-of-your-shorebird-updates.png b/src/assets/blog/covers/manual-control-of-your-shorebird-updates.png
new file mode 100644
index 00000000..68914e6c
Binary files /dev/null and b/src/assets/blog/covers/manual-control-of-your-shorebird-updates.png differ
diff --git a/src/assets/blog/covers/meet-our-first-shorebird-community-ambassadors.png b/src/assets/blog/covers/meet-our-first-shorebird-community-ambassadors.png
new file mode 100644
index 00000000..37dc2f2f
Binary files /dev/null and b/src/assets/blog/covers/meet-our-first-shorebird-community-ambassadors.png differ
diff --git a/src/assets/blog/covers/migrate-to-shorebird-api-keys.png b/src/assets/blog/covers/migrate-to-shorebird-api-keys.png
new file mode 100644
index 00000000..1291b16c
Binary files /dev/null and b/src/assets/blog/covers/migrate-to-shorebird-api-keys.png differ
diff --git a/src/assets/blog/covers/obfuscation-on-ios.png b/src/assets/blog/covers/obfuscation-on-ios.png
new file mode 100644
index 00000000..1837db77
Binary files /dev/null and b/src/assets/blog/covers/obfuscation-on-ios.png differ
diff --git a/src/assets/blog/covers/organizations-cover.png b/src/assets/blog/covers/organizations-cover.png
deleted file mode 100644
index 54655121..00000000
Binary files a/src/assets/blog/covers/organizations-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/organizations.avif b/src/assets/blog/covers/organizations.avif
new file mode 100644
index 00000000..783e4eec
Binary files /dev/null and b/src/assets/blog/covers/organizations.avif differ
diff --git a/src/assets/blog/covers/patch-rollback-cover.png b/src/assets/blog/covers/patch-rollback-cover.png
deleted file mode 100644
index d50b3de0..00000000
Binary files a/src/assets/blog/covers/patch-rollback-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/patch-rollback.avif b/src/assets/blog/covers/patch-rollback.avif
new file mode 100644
index 00000000..7929586e
Binary files /dev/null and b/src/assets/blog/covers/patch-rollback.avif differ
diff --git a/src/assets/blog/covers/patch-signing-beta.avif b/src/assets/blog/covers/patch-signing-beta.avif
new file mode 100644
index 00000000..c9a223bb
Binary files /dev/null and b/src/assets/blog/covers/patch-signing-beta.avif differ
diff --git a/src/assets/blog/covers/patch-signing-cover.png b/src/assets/blog/covers/patch-signing-cover.png
deleted file mode 100644
index 5a11089f..00000000
Binary files a/src/assets/blog/covers/patch-signing-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/portability-is-the-new-productivity.png b/src/assets/blog/covers/portability-is-the-new-productivity.png
new file mode 100644
index 00000000..5b78bc9a
Binary files /dev/null and b/src/assets/blog/covers/portability-is-the-new-productivity.png differ
diff --git a/src/assets/blog/covers/portable-software-ai-era.png b/src/assets/blog/covers/portable-software-ai-era.png
new file mode 100644
index 00000000..561aea39
Binary files /dev/null and b/src/assets/blog/covers/portable-software-ai-era.png differ
diff --git a/src/assets/blog/covers/predict-an-outage.png b/src/assets/blog/covers/predict-an-outage.png
new file mode 100644
index 00000000..189d4251
Binary files /dev/null and b/src/assets/blog/covers/predict-an-outage.png differ
diff --git a/src/assets/blog/covers/react-native-vs-flutter-for-enterprise-apps.png b/src/assets/blog/covers/react-native-vs-flutter-for-enterprise-apps.png
new file mode 100644
index 00000000..258488c2
Binary files /dev/null and b/src/assets/blog/covers/react-native-vs-flutter-for-enterprise-apps.png differ
diff --git a/src/assets/blog/covers/rolling-back-patches-reflection.png b/src/assets/blog/covers/rolling-back-patches-reflection.png
new file mode 100644
index 00000000..26853718
Binary files /dev/null and b/src/assets/blog/covers/rolling-back-patches-reflection.png differ
diff --git a/src/assets/blog/covers/say-hello-to-abhishek-doshi-shorebirds-devrel-engineer.png b/src/assets/blog/covers/say-hello-to-abhishek-doshi-shorebirds-devrel-engineer.png
new file mode 100644
index 00000000..f4528a72
Binary files /dev/null and b/src/assets/blog/covers/say-hello-to-abhishek-doshi-shorebirds-devrel-engineer.png differ
diff --git a/src/assets/blog/covers/seed-round-cover.png b/src/assets/blog/covers/seed-round-cover.png
deleted file mode 100644
index 9bcec643..00000000
Binary files a/src/assets/blog/covers/seed-round-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/seed-round.png b/src/assets/blog/covers/seed-round.png
new file mode 100644
index 00000000..3cd28ab8
Binary files /dev/null and b/src/assets/blog/covers/seed-round.png differ
diff --git a/src/assets/blog/covers/shorebird-code-push-v2.avif b/src/assets/blog/covers/shorebird-code-push-v2.avif
new file mode 100644
index 00000000..82e107f5
Binary files /dev/null and b/src/assets/blog/covers/shorebird-code-push-v2.avif differ
diff --git a/src/assets/blog/covers/shorebird-codemagic.avif b/src/assets/blog/covers/shorebird-codemagic.avif
new file mode 100644
index 00000000..80664dbd
Binary files /dev/null and b/src/assets/blog/covers/shorebird-codemagic.avif differ
diff --git a/src/assets/blog/covers/shorebird-create-cover.png b/src/assets/blog/covers/shorebird-create-cover.png
deleted file mode 100644
index 8998e174..00000000
Binary files a/src/assets/blog/covers/shorebird-create-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/shorebird-create.avif b/src/assets/blog/covers/shorebird-create.avif
new file mode 100644
index 00000000..30359cbf
Binary files /dev/null and b/src/assets/blog/covers/shorebird-create.avif differ
diff --git a/src/assets/blog/covers/shorebird-is-growing.avif b/src/assets/blog/covers/shorebird-is-growing.avif
new file mode 100644
index 00000000..725144c3
Binary files /dev/null and b/src/assets/blog/covers/shorebird-is-growing.avif differ
diff --git a/src/assets/blog/covers/shorebirds-community-ambassador-program.png b/src/assets/blog/covers/shorebirds-community-ambassador-program.png
new file mode 100644
index 00000000..37dc2f2f
Binary files /dev/null and b/src/assets/blog/covers/shorebirds-community-ambassador-program.png differ
diff --git a/src/assets/blog/covers/shorebirds-ongoing-performance-work.png b/src/assets/blog/covers/shorebirds-ongoing-performance-work.png
new file mode 100644
index 00000000..6365b811
Binary files /dev/null and b/src/assets/blog/covers/shorebirds-ongoing-performance-work.png differ
diff --git a/src/assets/blog/covers/simplified-pricing-cover.png b/src/assets/blog/covers/simplified-pricing-cover.png
deleted file mode 100644
index 2eadad69..00000000
Binary files a/src/assets/blog/covers/simplified-pricing-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/simplified-pricing.png b/src/assets/blog/covers/simplified-pricing.png
new file mode 100644
index 00000000..863aa209
Binary files /dev/null and b/src/assets/blog/covers/simplified-pricing.png differ
diff --git a/src/assets/blog/covers/stable-desktop-cover.png b/src/assets/blog/covers/stable-desktop-cover.png
deleted file mode 100644
index 1dd289fa..00000000
Binary files a/src/assets/blog/covers/stable-desktop-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/the-next-phase-of-shorebird-ci.png b/src/assets/blog/covers/the-next-phase-of-shorebird-ci.png
new file mode 100644
index 00000000..ee9cf9d0
Binary files /dev/null and b/src/assets/blog/covers/the-next-phase-of-shorebird-ci.png differ
diff --git a/src/assets/blog/covers/tom-joins-shorebird-cover.png b/src/assets/blog/covers/tom-joins-shorebird-cover.png
deleted file mode 100644
index f82b7cb1..00000000
Binary files a/src/assets/blog/covers/tom-joins-shorebird-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/tom-joins-shorebird.avif b/src/assets/blog/covers/tom-joins-shorebird.avif
new file mode 100644
index 00000000..4b7a9314
Binary files /dev/null and b/src/assets/blog/covers/tom-joins-shorebird.avif differ
diff --git a/src/assets/blog/covers/tracks-cover.png b/src/assets/blog/covers/tracks-cover.png
deleted file mode 100644
index ec6b46cc..00000000
Binary files a/src/assets/blog/covers/tracks-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/tracks-percentage-rollouts-a-b-testing.avif b/src/assets/blog/covers/tracks-percentage-rollouts-a-b-testing.avif
new file mode 100644
index 00000000..84fc2f11
Binary files /dev/null and b/src/assets/blog/covers/tracks-percentage-rollouts-a-b-testing.avif differ
diff --git a/src/assets/blog/covers/viewing-logs-cover.png b/src/assets/blog/covers/viewing-logs-cover.png
deleted file mode 100644
index 0617f44c..00000000
Binary files a/src/assets/blog/covers/viewing-logs-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/viewing-logs.png b/src/assets/blog/covers/viewing-logs.png
new file mode 100644
index 00000000..dff643f2
Binary files /dev/null and b/src/assets/blog/covers/viewing-logs.png differ
diff --git a/src/assets/blog/covers/we-tried-to-save-the-web.png b/src/assets/blog/covers/we-tried-to-save-the-web.png
new file mode 100644
index 00000000..61746cc9
Binary files /dev/null and b/src/assets/blog/covers/we-tried-to-save-the-web.png differ
diff --git a/src/assets/blog/covers/webview-vs-server-driven-ui-vs-code-push.png b/src/assets/blog/covers/webview-vs-server-driven-ui-vs-code-push.png
new file mode 100644
index 00000000..5ecf948d
Binary files /dev/null and b/src/assets/blog/covers/webview-vs-server-driven-ui-vs-code-push.png differ
diff --git a/src/assets/blog/covers/wesley-intro-post.png b/src/assets/blog/covers/wesley-intro-post.png
new file mode 100644
index 00000000..37dc2f2f
Binary files /dev/null and b/src/assets/blog/covers/wesley-intro-post.png differ
diff --git a/src/assets/blog/covers/what-happens-when-a-patch-fails.png b/src/assets/blog/covers/what-happens-when-a-patch-fails.png
new file mode 100644
index 00000000..54830c75
Binary files /dev/null and b/src/assets/blog/covers/what-happens-when-a-patch-fails.png differ
diff --git a/src/assets/blog/covers/why-dawn-joined.avif b/src/assets/blog/covers/why-dawn-joined.avif
new file mode 100644
index 00000000..4b7a9314
Binary files /dev/null and b/src/assets/blog/covers/why-dawn-joined.avif differ
diff --git a/src/assets/blog/covers/why-flutter-optimizes-for-the-ceiling-not-the-floor.png b/src/assets/blog/covers/why-flutter-optimizes-for-the-ceiling-not-the-floor.png
new file mode 100644
index 00000000..be92d31c
Binary files /dev/null and b/src/assets/blog/covers/why-flutter-optimizes-for-the-ceiling-not-the-floor.png differ
diff --git a/src/assets/blog/covers/why-you-need-to-deploy-shorebird-on-day-1.png b/src/assets/blog/covers/why-you-need-to-deploy-shorebird-on-day-1.png
new file mode 100644
index 00000000..e24e5bd9
Binary files /dev/null and b/src/assets/blog/covers/why-you-need-to-deploy-shorebird-on-day-1.png differ
diff --git a/src/assets/blog/covers/windows-beta-cover.png b/src/assets/blog/covers/windows-beta-cover.png
deleted file mode 100644
index 47056080..00000000
Binary files a/src/assets/blog/covers/windows-beta-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/windows-beta.png b/src/assets/blog/covers/windows-beta.png
new file mode 100644
index 00000000..dd400141
Binary files /dev/null and b/src/assets/blog/covers/windows-beta.png differ
diff --git a/src/assets/blog/covers/workshops-cover.png b/src/assets/blog/covers/workshops-cover.png
deleted file mode 100644
index 1a082e4c..00000000
Binary files a/src/assets/blog/covers/workshops-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/workshops.avif b/src/assets/blog/covers/workshops.avif
new file mode 100644
index 00000000..90b2b89b
Binary files /dev/null and b/src/assets/blog/covers/workshops.avif differ
diff --git a/src/assets/blog/covers/yearly-plans-cover.png b/src/assets/blog/covers/yearly-plans-cover.png
deleted file mode 100644
index d63a2873..00000000
Binary files a/src/assets/blog/covers/yearly-plans-cover.png and /dev/null differ
diff --git a/src/assets/blog/covers/yearly-plans.avif b/src/assets/blog/covers/yearly-plans.avif
new file mode 100644
index 00000000..70933c44
Binary files /dev/null and b/src/assets/blog/covers/yearly-plans.avif differ
diff --git a/src/assets/blog/flutter-vs-dotnet-maui-architecture-tooling-deployment/flutter-rendering-pipeline.jpg b/src/assets/blog/flutter-vs-dotnet-maui-architecture-tooling-deployment/flutter-rendering-pipeline.jpg
new file mode 100644
index 00000000..1ab4721c
Binary files /dev/null and b/src/assets/blog/flutter-vs-dotnet-maui-architecture-tooling-deployment/flutter-rendering-pipeline.jpg differ
diff --git a/src/assets/blog/flutter-vs-dotnet-maui-architecture-tooling-deployment/maui-rendering-pipeline.jpg b/src/assets/blog/flutter-vs-dotnet-maui-architecture-tooling-deployment/maui-rendering-pipeline.jpg
new file mode 100644
index 00000000..c8ddab58
Binary files /dev/null and b/src/assets/blog/flutter-vs-dotnet-maui-architecture-tooling-deployment/maui-rendering-pipeline.jpg differ
diff --git a/src/assets/blog/flutter-vs-react-native/flutter-vs-react-01.jpg b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-01.jpg
new file mode 100644
index 00000000..49478373
Binary files /dev/null and b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-01.jpg differ
diff --git a/src/assets/blog/flutter-vs-react-native/flutter-vs-react-02.jpg b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-02.jpg
new file mode 100644
index 00000000..36ef40d8
Binary files /dev/null and b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-02.jpg differ
diff --git a/src/assets/blog/flutter-vs-react-native/flutter-vs-react-03.jpg b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-03.jpg
new file mode 100644
index 00000000..588880b3
Binary files /dev/null and b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-03.jpg differ
diff --git a/src/assets/blog/flutter-vs-react-native/flutter-vs-react-04.jpg b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-04.jpg
new file mode 100644
index 00000000..357b8803
Binary files /dev/null and b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-04.jpg differ
diff --git a/src/assets/blog/flutter-vs-react-native/flutter-vs-react-05.jpg b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-05.jpg
new file mode 100644
index 00000000..ae186cb1
Binary files /dev/null and b/src/assets/blog/flutter-vs-react-native/flutter-vs-react-05.jpg differ
diff --git a/src/assets/blog/headshots/abhishekdoshi.jpg b/src/assets/blog/headshots/abhishekdoshi.jpg
new file mode 100644
index 00000000..8d49cbce
Binary files /dev/null and b/src/assets/blog/headshots/abhishekdoshi.jpg differ
diff --git a/src/assets/blog/headshots/brandonderosier.png b/src/assets/blog/headshots/brandonderosier.png
new file mode 100644
index 00000000..2b478124
Binary files /dev/null and b/src/assets/blog/headshots/brandonderosier.png differ
diff --git a/src/assets/blog/headshots/maccarrithers.avif b/src/assets/blog/headshots/maccarrithers.avif
new file mode 100644
index 00000000..cc83f8f3
Binary files /dev/null and b/src/assets/blog/headshots/maccarrithers.avif differ
diff --git a/src/assets/blog/headshots/nickweatherley.jpg b/src/assets/blog/headshots/nickweatherley.jpg
new file mode 100644
index 00000000..dcb94ed0
Binary files /dev/null and b/src/assets/blog/headshots/nickweatherley.jpg differ
diff --git a/src/assets/blog/headshots/wesleypeck.png b/src/assets/blog/headshots/wesleypeck.png
new file mode 100644
index 00000000..7aa780f4
Binary files /dev/null and b/src/assets/blog/headshots/wesleypeck.png differ
diff --git a/src/assets/blog/introducing-mission-control/activityheatmap.png b/src/assets/blog/introducing-mission-control/activityheatmap.png
new file mode 100644
index 00000000..d0ba485a
Binary files /dev/null and b/src/assets/blog/introducing-mission-control/activityheatmap.png differ
diff --git a/src/assets/blog/introducing-mission-control/missioncontrol.png b/src/assets/blog/introducing-mission-control/missioncontrol.png
new file mode 100644
index 00000000..c5bcc44f
Binary files /dev/null and b/src/assets/blog/introducing-mission-control/missioncontrol.png differ
diff --git a/src/assets/blog/introducing-mission-control/patchconfidence.png b/src/assets/blog/introducing-mission-control/patchconfidence.png
new file mode 100644
index 00000000..b792b644
Binary files /dev/null and b/src/assets/blog/introducing-mission-control/patchconfidence.png differ
diff --git a/src/assets/blog/introducing-mission-control/situationalawareness.png b/src/assets/blog/introducing-mission-control/situationalawareness.png
new file mode 100644
index 00000000..099c5723
Binary files /dev/null and b/src/assets/blog/introducing-mission-control/situationalawareness.png differ
diff --git a/src/assets/blog/meet-our-first-shorebird-community-ambassadors/communityambassadorsposter.png b/src/assets/blog/meet-our-first-shorebird-community-ambassadors/communityambassadorsposter.png
new file mode 100644
index 00000000..3658717f
Binary files /dev/null and b/src/assets/blog/meet-our-first-shorebird-community-ambassadors/communityambassadorsposter.png differ
diff --git a/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-09-50-pm.png b/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-09-50-pm.png
new file mode 100644
index 00000000..bde4a1bc
Binary files /dev/null and b/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-09-50-pm.png differ
diff --git a/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-10-14-pm.png b/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-10-14-pm.png
new file mode 100644
index 00000000..9087ff13
Binary files /dev/null and b/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-10-14-pm.png differ
diff --git a/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-10-45-pm.png b/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-10-45-pm.png
new file mode 100644
index 00000000..41735988
Binary files /dev/null and b/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-10-45-pm.png differ
diff --git a/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-11-35-pm.png b/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-11-35-pm.png
new file mode 100644
index 00000000..d2aaf1d6
Binary files /dev/null and b/src/assets/blog/migrate-to-shorebird-api-keys/screenshot-2026-06-11-at-4-11-35-pm.png differ
diff --git a/src/assets/blog/react-native-vs-flutter-for-enterprise-apps/flutter-react-enterprise-blog-1.jpg b/src/assets/blog/react-native-vs-flutter-for-enterprise-apps/flutter-react-enterprise-blog-1.jpg
new file mode 100644
index 00000000..425d36e4
Binary files /dev/null and b/src/assets/blog/react-native-vs-flutter-for-enterprise-apps/flutter-react-enterprise-blog-1.jpg differ
diff --git a/src/assets/blog/react-native-vs-flutter-for-enterprise-apps/flutter-react-enterprise-blog-2.jpg b/src/assets/blog/react-native-vs-flutter-for-enterprise-apps/flutter-react-enterprise-blog-2.jpg
new file mode 100644
index 00000000..bfb7933e
Binary files /dev/null and b/src/assets/blog/react-native-vs-flutter-for-enterprise-apps/flutter-react-enterprise-blog-2.jpg differ
diff --git a/src/assets/blog/react-native-vs-flutter-for-enterprise-apps/flutter-react-enterprise-blog-3.jpg b/src/assets/blog/react-native-vs-flutter-for-enterprise-apps/flutter-react-enterprise-blog-3.jpg
new file mode 100644
index 00000000..391382b6
Binary files /dev/null and b/src/assets/blog/react-native-vs-flutter-for-enterprise-apps/flutter-react-enterprise-blog-3.jpg differ
diff --git a/src/assets/brands/apna-klub.png b/src/assets/brands/apna-klub.png
deleted file mode 100644
index bbea8b7f..00000000
Binary files a/src/assets/brands/apna-klub.png and /dev/null differ
diff --git a/src/assets/brands/apnaklub.svg b/src/assets/brands/apnaklub.svg
new file mode 100644
index 00000000..b29a9318
--- /dev/null
+++ b/src/assets/brands/apnaklub.svg
@@ -0,0 +1,20 @@
+<svg width="135" height="48" viewBox="0 0 135 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_8149_4017)">
+<path d="M34.947 29.1896V33.373H31.375V19.2256H37.0125C38.9849 19.2256 40.4408 19.676 41.3798 20.5767C42.3204 21.4774 42.7882 22.6784 42.7882 24.1777C42.7882 25.6771 42.326 26.9559 41.398 27.8566C40.4699 28.7573 39.0288 29.2022 37.0707 29.1896H34.9454H34.947ZM34.947 22.2642V26.1311H36.9706C37.6458 26.1311 38.1788 25.9665 38.5683 25.6373C38.9578 25.3082 39.1543 24.8216 39.1543 24.1777C39.1543 23.5737 38.9651 23.1034 38.5884 22.767C38.2118 22.4306 37.6657 22.2642 36.9507 22.2642H34.947Z" fill="#F8F8F9"/>
+<path d="M50.8873 31.4374C50.5962 32.0958 50.1667 32.6185 49.5971 33.0056C49.0276 33.3926 48.3143 33.588 47.4536 33.588C46.1707 33.588 45.2134 33.2063 44.5856 32.4431C43.956 31.6798 43.6431 30.6018 43.6431 29.2073V21.9256H47.257V28.1402C47.257 28.8384 47.3625 29.4009 47.5736 29.8259C47.7866 30.2527 48.2159 30.4662 48.8637 30.4662C49.5116 30.4662 49.9483 30.2256 50.214 29.7463C50.4779 29.267 50.6107 28.6448 50.6107 27.8816V21.9238H54.2829V33.3673H51.2256L50.8873 31.4338V31.4374Z" fill="#F8F8F9"/>
+<path d="M56.891 32.6016C55.9501 31.8781 55.3898 30.858 55.2041 29.5431H58.9364C59.0563 30.0025 59.2892 30.3516 59.6404 30.5885C59.9916 30.8254 60.4647 30.943 61.0598 30.943C61.655 30.943 62.0426 30.8544 62.3009 30.6771C62.5574 30.4999 62.6885 30.2539 62.6885 29.9374C62.6885 29.8053 62.6594 29.6914 62.5993 29.5919C62.5392 29.4943 62.4427 29.4111 62.3118 29.346C62.0733 29.2139 61.7495 29.1163 61.3382 29.0493C60.9269 28.9842 60.4849 28.9245 60.0081 28.8721C59.5185 28.807 59.0183 28.7165 58.5086 28.6062C57.9991 28.4959 57.5316 28.3204 57.1094 28.0835C56.6726 27.8592 56.3251 27.5391 56.0667 27.1159C55.8083 26.6944 55.6791 26.1428 55.6791 25.4591C55.6791 24.3414 56.1086 23.4298 56.9693 22.7262C57.828 22.0226 59.0728 21.6699 60.7013 21.6699C62.4337 21.6699 63.7183 22.0208 64.5518 22.7262C65.3853 23.4298 65.8892 24.354 66.0603 25.4989H62.5065C62.4265 25.0919 62.2319 24.7863 61.9207 24.5819C61.6095 24.3775 61.1889 24.2762 60.6613 24.2762C60.1063 24.2762 59.7151 24.3685 59.4894 24.553C59.2638 24.7374 59.1511 24.9672 59.1511 25.2439C59.1511 25.6002 59.3857 25.8353 59.8552 25.9547C60.3246 26.0741 60.9834 26.1844 61.8295 26.2893C62.3337 26.3544 62.8378 26.4466 63.3489 26.566C63.8586 26.6854 64.3317 26.8626 64.7683 27.0978C65.1924 27.3347 65.5363 27.6603 65.8 28.0745C66.064 28.4886 66.1968 29.0312 66.1968 29.7022C66.1968 30.0839 66.1476 30.4456 66.0477 30.7875C65.9493 31.1293 65.8056 31.4512 65.6219 31.7551C65.2251 32.3465 64.6318 32.8168 63.8458 33.1659C63.0579 33.5131 62.0697 33.6886 60.878 33.6886C59.1584 33.6886 57.828 33.3268 56.8874 32.6034L56.891 32.6016Z" fill="#F8F8F9"/>
+<path d="M70.9095 33.3706H67.3174V18.1777H70.9095V23.6833C71.2261 23.0648 71.6701 22.5782 72.2397 22.2237C72.8092 21.8692 73.5097 21.692 74.3432 21.692C75.6389 21.692 76.5924 22.0736 77.2019 22.8351C77.8096 23.5983 78.1154 24.6709 78.1154 26.0509V33.3706H74.4833V27.1162C74.4833 26.4198 74.3633 25.8556 74.1268 25.4305C73.8883 25.0018 73.4389 24.7902 72.7765 24.7902C72.1141 24.7902 71.6374 25.0308 71.348 25.5101C71.0569 25.9912 70.9112 26.6188 70.9112 27.3947V33.3742L70.9095 33.3706Z" fill="#F8F8F9"/>
+<path d="M83.3394 29.1896V33.373H79.7656V19.2256H85.4029C87.3736 19.2256 88.8312 19.676 89.7702 20.5767C90.711 21.4774 91.1786 22.6784 91.1786 24.1777C91.1786 25.6771 90.7164 26.9559 89.7883 27.8566C88.8622 28.7573 87.4192 29.2022 85.4613 29.1896H83.3377H83.3394ZM83.3394 22.2642V26.1311H85.3629C86.0382 26.1311 86.5711 25.9665 86.9606 25.6373C87.3501 25.3082 87.5467 24.8216 87.5467 24.1777C87.5467 23.5737 87.3574 23.1034 86.9807 22.767C86.6041 22.4306 86.058 22.2642 85.343 22.2642H83.3394Z" fill="#F8F8F9"/>
+<path d="M92.0684 33.3712V21.9277H94.9671L95.464 24.2754C95.6496 23.3819 96.0391 22.7398 96.6358 22.3509C97.2308 21.9639 98.0442 21.7686 99.0779 21.7686H99.7331V25.5378H98.3828C98.0389 25.5378 97.7313 25.5613 97.4601 25.6066C97.1891 25.6536 96.9543 25.7223 96.756 25.8127C96.3847 25.9828 96.1264 26.2703 95.9826 26.6701C95.837 27.0716 95.7643 27.6142 95.7643 28.2979V33.3694H92.0703L92.0684 33.3712Z" fill="#F8F8F9"/>
+<path d="M110.016 32.6019C109.09 33.3127 107.787 33.6672 106.106 33.6672C104.108 33.6672 102.632 33.1517 101.679 32.1171C100.725 31.0844 100.25 29.6881 100.25 27.9246V27.5882C100.25 26.9696 100.31 26.3981 100.428 25.8718C100.549 25.3455 100.732 24.8644 100.983 24.4303C101.473 23.5495 102.161 22.8712 103.049 22.3973C103.935 21.9235 104.974 21.6865 106.166 21.6865C106.841 21.6865 107.456 21.7516 108.013 21.8837C108.568 22.0157 109.057 22.2128 109.481 22.4751C110.327 23.0014 110.954 23.696 111.357 24.5569C111.76 25.4196 111.963 26.3692 111.963 27.4074V28.6897H103.844C103.937 29.4005 104.179 29.9323 104.568 30.2886C104.958 30.6431 105.505 30.8203 106.206 30.8203C106.708 30.8203 107.11 30.7227 107.407 30.5237C107.705 30.3266 107.92 30.0643 108.051 29.7333H111.883C111.567 30.9307 110.943 31.8838 110.018 32.5946L110.016 32.6019ZM104.617 24.9186C104.221 25.255 103.962 25.7633 103.844 26.4469H108.39C108.31 25.8013 108.095 25.302 107.745 24.9475C107.394 24.593 106.883 24.4158 106.208 24.4158C105.533 24.4158 105.018 24.584 104.621 24.9186H104.617Z" fill="#F8F8F9"/>
+<path d="M114.129 32.6016C113.188 31.8781 112.628 30.858 112.442 29.5431H116.174C116.294 30.0025 116.527 30.3516 116.878 30.5885C117.229 30.8254 117.703 30.943 118.298 30.943C118.893 30.943 119.28 30.8544 119.539 30.6771C119.797 30.4999 119.926 30.2539 119.926 29.9374C119.926 29.8053 119.897 29.6914 119.837 29.5919C119.777 29.4943 119.681 29.4111 119.55 29.346C119.311 29.2139 118.987 29.1163 118.578 29.0493C118.167 28.9842 117.723 28.9245 117.248 28.8721C116.758 28.807 116.258 28.7165 115.748 28.6062C115.239 28.4959 114.771 28.3204 114.349 28.0835C113.912 27.8592 113.565 27.5391 113.308 27.1159C113.05 26.6944 112.921 26.1428 112.921 25.4591C112.921 24.3414 113.35 23.4298 114.211 22.7262C115.071 22.0226 116.314 21.6699 117.943 21.6699C119.675 21.6699 120.96 22.0208 121.793 22.7262C122.627 23.4298 123.131 24.354 123.302 25.4989H119.748C119.67 25.0919 119.473 24.7863 119.162 24.5819C118.851 24.3775 118.43 24.2762 117.901 24.2762C117.371 24.2762 116.955 24.3685 116.729 24.553C116.504 24.7374 116.391 24.9672 116.391 25.2439C116.391 25.6002 116.625 25.8353 117.095 25.9547C117.564 26.0741 118.223 26.1844 119.069 26.2893C119.573 26.3544 120.079 26.4466 120.589 26.566C121.098 26.6854 121.571 26.8626 122.008 27.0978C122.432 27.3347 122.776 27.6603 123.04 28.0745C123.305 28.4886 123.437 29.0312 123.437 29.7022C123.437 30.0839 123.387 30.4456 123.287 30.7875C123.189 31.1293 123.045 31.4512 122.861 31.7551C122.465 32.3465 121.872 32.8168 121.085 33.1659C120.298 33.5131 119.309 33.6886 118.119 33.6886C116.4 33.6886 115.069 33.3268 114.129 32.6034V32.6016Z" fill="#F8F8F9"/>
+<path d="M125.569 32.6016C124.628 31.8781 124.068 30.858 123.882 29.5431H127.615C127.735 30.0025 127.967 30.3516 128.319 30.5885C128.67 30.8254 129.143 30.943 129.738 30.943C130.333 30.943 130.721 30.8544 130.979 30.6771C131.238 30.4999 131.367 30.2539 131.367 29.9374C131.367 29.8053 131.338 29.6914 131.278 29.5919C131.217 29.4943 131.121 29.4111 130.99 29.346C130.752 29.2139 130.428 29.1163 130.016 29.0493C129.605 28.9842 129.163 28.9245 128.686 28.8721C128.197 28.807 127.696 28.7165 127.187 28.6062C126.677 28.4959 126.21 28.3204 125.788 28.0835C125.351 27.8592 125.003 27.5391 124.747 27.1159C124.488 26.6944 124.359 26.1428 124.359 25.4591C124.359 24.3414 124.789 23.4298 125.649 22.7262C126.51 22.0226 127.753 21.6699 129.381 21.6699C131.114 21.6699 132.398 22.0208 133.232 22.7262C134.065 23.4298 134.569 24.354 134.74 25.4989H131.187C131.106 25.0919 130.912 24.7863 130.601 24.5819C130.289 24.3775 129.869 24.2762 129.34 24.2762C128.81 24.2762 128.393 24.3685 128.168 24.553C127.942 24.7374 127.829 24.9672 127.829 25.2439C127.829 25.6002 128.064 25.8353 128.533 25.9547C129.003 26.0741 129.662 26.1844 130.508 26.2893C131.012 26.3544 131.516 26.4466 132.027 26.566C132.537 26.6854 133.01 26.8626 133.447 27.0978C133.871 27.3347 134.215 27.6603 134.478 28.0745C134.744 28.4886 134.875 29.0312 134.875 29.7022C134.875 30.0839 134.826 30.4456 134.726 30.7875C134.628 31.1293 134.484 31.4512 134.3 31.7551C133.903 32.3465 133.31 32.8168 132.524 33.1659C131.736 33.5131 130.748 33.6886 129.556 33.6886C127.837 33.6886 126.506 33.3268 125.566 32.6034L125.569 32.6016Z" fill="#F8F8F9"/>
+<path d="M8.97103 31.666H0.418527C0.187427 31.666 0 31.8523 0 32.082V40.5827C0 40.9536 0.451281 41.14 0.715137 40.8775L9.26764 32.3768C9.53151 32.1146 9.34406 31.666 8.97103 31.666Z" fill="#F8F8F9"/>
+<path d="M5.0603 12H13.8512C18.6206 12 22.4929 15.8489 22.4929 20.5912C22.4929 25.3317 18.6206 29.1824 13.8494 29.1824H2.91671C2.68561 29.1824 2.5 28.9961 2.5 28.7682V14.5448C2.49818 13.1413 3.64641 12 5.0603 12Z" fill="#F8F8F9"/>
+</g>
+<defs>
+<clipPath id="clip0_8149_4017">
+<rect width="135" height="29" fill="white" transform="translate(0 12)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/brands/chai.png b/src/assets/brands/chai.png
deleted file mode 100644
index 010f0de2..00000000
Binary files a/src/assets/brands/chai.png and /dev/null differ
diff --git a/src/assets/brands/cloudwalk.svg b/src/assets/brands/cloudwalk.svg
new file mode 100644
index 00000000..11061de0
--- /dev/null
+++ b/src/assets/brands/cloudwalk.svg
@@ -0,0 +1,26 @@
+<svg width="165" height="48" viewBox="0 0 165 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_8149_3864)">
+<path d="M67.355 16.0977H70.5478V31.6592H67.355V16.0977Z" fill="#EFEFEF"/>
+<path d="M72.2373 25.7627C72.2373 22.2026 74.9144 19.6299 78.5673 19.6299C82.2341 19.6299 84.8972 22.2026 84.8972 25.7627C84.8972 29.3228 82.2341 31.8956 78.5673 31.8956C74.9004 31.8956 72.2373 29.3228 72.2373 25.7627ZM78.5673 28.9334C80.3519 28.9334 81.6625 27.6123 81.6625 25.7906C81.6625 23.9687 80.3519 22.6476 78.5673 22.6476C76.7826 22.6476 75.472 23.9687 75.472 25.7906C75.472 27.5844 76.7826 28.9334 78.5673 28.9334Z" fill="#EFEFEF"/>
+<path d="M86.583 26.6943V19.8662H89.7759V26.3189C89.7759 28.0154 90.5706 28.9472 91.9927 28.9472C93.6658 28.9472 94.7254 27.9042 94.7254 26.2494V19.8801H97.9183V31.659H94.9067L94.8231 30.2683C93.9168 31.3113 92.6201 31.8675 91.0864 31.8675C88.2561 31.8814 86.583 30.0597 86.583 26.6943Z" fill="#EFEFEF"/>
+<path d="M99.8286 25.7628C99.8286 22.2027 102.31 19.6299 105.699 19.6299C107.065 19.6299 108.278 20.0472 109.268 20.812V16.0977H112.461V31.6592H109.7L109.575 30.4771C108.543 31.3671 107.218 31.8956 105.699 31.8956C102.185 31.8956 99.8286 29.1838 99.8286 25.7628ZM106.159 28.9335C107.985 28.9335 109.296 27.6262 109.296 25.7906C109.296 23.9548 107.985 22.6477 106.159 22.6477C104.346 22.6477 103.049 23.9548 103.049 25.7906C103.035 27.5984 104.346 28.9335 106.159 28.9335Z" fill="#EFEFEF"/>
+<path d="M113.993 20.1443V19.8801H117.311L118.357 23.3011L119.584 27.1393L122.219 20.5059H124.645L127.322 27.1532L128.535 23.2872L129.581 19.8662H132.872V20.1305L128.94 31.6451H125.956L124.77 28.6135L123.404 24.956L122.01 28.6135L120.797 31.6451H117.855L113.993 20.1443Z" fill="#EFEFEF"/>
+<path d="M133.165 25.7627C133.165 22.1609 135.688 19.6299 139.118 19.6299C140.624 19.6299 141.963 20.1584 142.953 21.0484L143.078 19.8663H145.838V31.6452H143.078L142.953 30.4631C141.92 31.3532 140.596 31.8816 139.118 31.8816C135.576 31.8956 133.165 29.2254 133.165 25.7627ZM139.536 28.9334C141.349 28.9334 142.646 27.6262 142.646 25.7906C142.646 23.9548 141.335 22.6476 139.536 22.6476C137.71 22.6476 136.399 23.9548 136.399 25.7906C136.399 27.5984 137.71 28.9334 139.536 28.9334Z" fill="#EFEFEF"/>
+<path d="M148.642 16.0977H151.836V31.6592H148.642V16.0977Z" fill="#EFEFEF"/>
+<path d="M157.676 26.472V31.6592H154.483V16.0977H157.676V24.9006L161.064 19.8524H164.661V20.1445L160.785 25.5542L165.052 31.3532V31.6453H161.301L157.676 26.472Z" fill="#EFEFEF"/>
+<path d="M60.7477 28.9335C58.9212 28.9335 57.6943 27.6401 57.6943 25.7905C57.6943 23.941 58.9212 22.6476 60.7477 22.6476C61.905 22.6476 62.867 23.2177 63.3829 24.1774L66.004 22.5921C64.9723 20.7841 63.0483 19.6855 60.692 19.6855C57.0391 19.6855 54.4736 22.2443 54.4736 25.8184C54.4736 29.3923 57.053 31.9511 60.692 31.9511C63.0762 31.9511 65.0002 30.8386 66.0319 29.0447L63.3131 27.5567C62.7834 28.3771 61.8911 28.9335 60.7477 28.9335Z" fill="#EFEFEF"/>
+<path d="M7.20915 12.8701C3.97448 16.1799 1.99463 20.7134 1.99463 25.7059C1.99463 30.6984 3.97448 35.2042 7.20915 38.5278C5.50815 34.5923 4.574 30.2673 4.574 25.7198C4.54612 21.1446 5.50815 16.8196 7.20915 12.8701Z" fill="#EFEFEF"/>
+<path d="M9.32856 40.4071C10.7368 41.478 12.3262 42.3402 14.0133 42.966C10.3882 38.1542 8.24105 32.1744 8.24105 25.7078C8.24105 19.2134 10.4022 13.2336 14.0411 8.42188C12.3542 9.06158 10.7647 9.90989 9.32856 10.9807C6.98622 15.3752 5.63379 20.3816 5.63379 25.7078C5.66168 31.034 6.98622 36.0404 9.32856 40.4071Z" fill="#EFEFEF"/>
+<path d="M15.9085 43.5629C17.219 43.8966 18.6133 44.0775 20.0215 44.1191C15.058 39.5439 11.9488 32.9939 11.9488 25.7346C11.9488 18.4475 15.058 11.8975 20.0494 7.32227C18.6412 7.36398 17.2748 7.54477 15.9364 7.87853C11.8094 12.6763 9.35547 18.9065 9.35547 25.7207C9.35547 32.5349 11.8094 38.7512 15.9085 43.5629Z" fill="#EFEFEF"/>
+<path d="M13.0508 25.7214C13.0508 33.092 16.411 39.6976 21.6673 44.0643C22.7129 44.0087 23.7308 43.8418 24.7207 43.6054C19.0182 39.6837 15.2676 33.1337 15.2676 25.7075C15.2676 18.2675 19.0182 11.7175 24.7347 7.79583C23.7448 7.55942 22.7269 7.40644 21.6812 7.33691C16.397 11.7453 13.0508 18.337 13.0508 25.7214Z" fill="#EFEFEF"/>
+<path d="M16.7324 25.7207C16.7324 33.0912 20.6782 39.5439 26.5759 43.0761C27.4682 42.7563 28.3186 42.3808 29.1413 41.9498C23.1042 39.0154 18.9632 32.8687 18.9632 25.7207C18.9632 18.5727 23.132 12.4121 29.1691 9.49166C28.3605 9.06056 27.4961 8.68508 26.6036 8.36523C20.692 11.9114 16.7324 18.3641 16.7324 25.7207Z" fill="#EFEFEF"/>
+<path d="M20.4258 25.7203C20.4258 32.632 24.6504 38.5284 30.6596 41.0177C31.273 40.6283 31.8447 40.1693 32.4024 39.6965C26.5048 37.7635 22.2662 32.2286 22.2662 25.7203C22.2662 19.1843 26.5325 13.6633 32.4302 11.7303C31.8726 11.2575 31.3009 10.8264 30.6875 10.4092C24.6504 12.8985 20.4258 18.8088 20.4258 25.7203Z" fill="#EFEFEF"/>
+<path d="M24.1216 25.7215C24.1216 31.7848 28.3044 36.8608 33.965 38.2375C34.4391 37.723 34.8713 37.1945 35.2897 36.6383C30.0054 35.8038 25.962 31.2286 25.962 25.7354C25.962 20.2284 30.0054 15.6532 35.3036 14.8327C34.8852 14.2764 34.453 13.7201 33.979 13.2334C28.3044 14.5823 24.1216 19.6722 24.1216 25.7215Z" fill="#EFEFEF"/>
+<path d="M28.1646 25.7203C28.1646 30.4486 31.9151 34.3285 36.6137 34.5233C38.0358 31.9088 38.8724 28.905 38.8724 25.6925C38.8724 22.5079 38.0637 19.4902 36.6277 16.8896C31.9151 17.1121 28.1646 20.9642 28.1646 25.7203Z" fill="#EFEFEF"/>
+</g>
+<defs>
+<clipPath id="clip0_8149_3864">
+<rect width="165" height="48" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/brands/couchsurfing.svg b/src/assets/brands/couchsurfing.svg
new file mode 100644
index 00000000..861a1d24
--- /dev/null
+++ b/src/assets/brands/couchsurfing.svg
@@ -0,0 +1,16 @@
+<svg width="122" height="48" viewBox="0 0 122 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_8149_3855)">
+<path d="M16.7784 24.9397C16.6973 25.5889 16.4741 26.2787 16.1698 27.0091C15.8452 27.7395 15.3786 28.4699 14.7497 29.1394C14.5266 29.3626 14.3237 29.5046 14.1411 29.5655C14.06 29.5858 13.9788 29.5858 13.918 29.5858C13.8165 29.5858 13.7151 29.5655 13.6339 29.5249C13.4514 29.464 13.3094 29.3829 13.1876 29.2814C13.0659 29.18 12.9848 29.0583 12.9036 28.9568C12.8427 28.8351 12.7413 28.551 12.6196 27.9018C12.5384 27.3743 12.4776 26.7251 12.4573 25.9744C12.437 25.244 12.4979 24.4122 12.5993 23.4992C12.7007 22.6674 12.863 21.8153 13.1065 21.0038C13.6137 21.1661 13.9991 21.2675 14.3034 21.3487C14.6889 21.4501 14.9526 21.5516 15.1555 21.6124C15.3786 21.6936 15.5409 21.795 15.6829 21.8762C15.8249 21.9776 16.0075 22.0993 16.2104 22.2414C16.4335 22.4442 16.6161 22.7689 16.7176 23.2355C16.8596 23.7224 16.8799 24.2905 16.7784 24.9397ZM17.8333 21.1661C17.5088 20.8212 17.0624 20.4966 16.5553 20.2125C16.0481 19.9488 15.5003 19.685 14.8917 19.4821C14.2831 19.259 13.6542 19.0967 13.0456 18.9749C12.4167 18.8329 11.8284 18.772 11.3212 18.7315H11.1995C11.1995 18.7315 11.0778 19.0764 10.7532 19.2995C10.7532 19.2995 10.6112 19.4619 10.4489 19.543L10.1649 19.685L10.4286 19.8879C10.6518 20.0502 10.8343 20.3343 10.9155 20.456C10.9966 20.5574 11.0372 20.6386 11.1184 20.7603C10.9966 21.4704 10.9155 22.3428 10.8546 23.3978C10.7126 23.5398 10.5706 23.7021 10.4083 23.905C10.1852 24.189 9.88085 24.534 9.47511 25.0209C9.08966 25.4469 8.62306 25.9541 8.01445 26.5628C7.60871 26.9077 7.22326 27.2323 6.83781 27.5569C6.47264 27.8612 5.45829 28.8757 4.5048 29.2206C4.05849 29.3829 3.69332 29.5858 3.12529 29.7075C2.88185 29.6872 2.3341 29.8292 2.07037 29.2003C1.25889 27.4149 2.3341 23.6818 2.69926 22.708C3.28759 21.1864 5.19456 19.8068 5.6003 19.5024C6.04661 19.1575 6.51321 18.9749 6.77694 18.7923C7.44641 18.346 7.24354 17.9199 7.24354 17.9199C7.24354 17.9199 6.39149 17.6968 5.39743 17.8996C4.8294 18.0214 3.97734 18.4271 3.51074 18.8329C3.04414 19.2387 2.57754 19.5227 2.07037 20.3951C1.50233 21.3487 1.07631 21.9573 0.751714 22.9515C0.427123 23.9659 0.0213832 25.9744 0.00109623 27.1512C-0.0191907 28.2061 0.24454 29.8495 0.589418 30.6002C0.893723 31.2697 1.21831 31.6349 1.58348 31.7363C1.90807 31.8175 2.43553 31.9798 2.96299 31.8783C4.13964 31.6349 5.47858 31.0059 6.57407 30.1741C7.629 29.3626 8.27818 28.5713 9.08966 27.6584C9.7997 26.8265 10.4083 26.299 10.8749 25.5484C10.8749 26.299 10.8952 26.8265 10.9358 27.6786C10.9561 28.0438 11.0372 28.4293 11.1589 28.9365C11.2807 29.4234 11.4835 29.8901 11.727 30.3364C11.9907 30.7828 12.3356 31.1683 12.7616 31.4929C13.2079 31.8175 13.7354 31.9798 14.3643 31.9798C14.77 31.9798 15.196 31.7363 15.6424 31.2697C16.0481 30.8233 16.4538 30.2756 16.819 29.606C17.1639 28.9365 17.4885 28.1859 17.7725 27.3743C18.0565 26.5628 18.2797 25.7513 18.4014 24.96C18.5434 24.1688 18.584 23.4384 18.5231 22.7891C18.4014 22.0385 18.1782 21.511 17.8333 21.1661Z" fill="#F8F8F9"/>
+<path d="M19.9629 16.9479C19.9629 17.0291 20.0643 18.6724 20.0846 19.6869C20.1049 20.6607 20.1049 24.1706 20.1252 25.2053C20.1455 26.24 20.1252 27.437 20.1658 28.1471C20.2063 28.8572 20.2875 29.5673 20.3686 30.0542C20.4498 30.5817 20.5715 30.9063 20.7744 31.0686C20.9164 31.3121 21.1598 31.515 21.4844 31.657C21.6264 31.7179 21.7684 31.7381 21.951 31.7381C22.235 31.7381 22.5799 31.657 22.9451 31.515C23.1682 31.4338 23.3914 31.2107 23.6754 30.7846C23.9391 30.4194 24.2029 29.9731 24.5072 29.4456C24.7912 28.9181 25.0752 28.3703 25.3592 27.8022C25.5215 27.4776 25.6838 27.1733 25.8258 26.8689C25.8461 27.0515 25.8664 27.2341 25.8867 27.4167C25.9273 27.8834 25.9881 28.3094 26.0693 28.7152C26.1504 29.1209 26.2316 29.4861 26.333 29.7905C26.4547 30.1557 26.6373 30.3788 26.8807 30.4194C27.3473 30.602 27.8545 30.6223 28.4226 30.4803C28.9703 30.3383 29.4978 30.0948 29.9644 29.7905C30.3701 29.5267 30.715 29.2021 31.0396 28.8369C31.1207 29.2224 31.2222 29.5876 31.3845 29.9122C31.6888 30.5817 32.0336 30.9469 32.4394 31.0483C32.764 31.1295 33.19 31.2309 33.758 31.2309C34.6304 31.2106 36.3142 30.5006 37.4503 29.6687C38.566 28.8572 39.1949 28.5529 40.0267 27.6196C40.4933 27.1124 41.812 26.0777 41.812 25.5908C41.812 25.5908 41.5482 31.4135 41.8728 31.4135C42.3394 31.3932 42.3597 31.4338 42.7046 31.5556C43.1103 31.6976 43.1103 31.799 43.3132 31.8396C43.4958 31.8802 43.7595 31.941 43.7798 31.8599C43.8001 31.7787 43.7392 31.6976 43.6986 31.4744C43.6581 31.2309 43.6378 31.2512 43.6175 30.6426C43.5972 30.1759 43.5972 30.1557 43.6175 29.5673C43.6378 28.9992 43.6784 28.3906 43.7189 27.8022C43.7798 27.2138 43.8407 26.7472 43.9218 26.382C43.9624 26.2806 43.9827 26.1386 44.0435 25.8951C44.145 25.5299 44.2464 25.1038 44.3884 24.6372C44.855 23.1359 45.1999 22.1012 45.4636 21.6142C45.6868 21.2288 45.9708 20.6607 46.1534 20.6607C46.2954 20.6607 46.2751 20.681 46.5388 21.594C46.7011 22.1012 46.8634 22.7098 47.0866 23.3996C47.3097 24.0894 47.5937 24.7995 47.9386 25.5096C48.2835 26.24 48.7095 26.8486 49.1558 27.3153C49.6427 27.8022 50.2108 28.0862 50.8397 28.1471C51.4686 28.208 52.1989 27.9036 52.9698 27.2544L53.3349 26.9501L52.8684 26.8892C51.9757 26.7878 51.2657 26.4835 50.7788 25.9762C50.2716 25.469 49.8456 24.8807 49.5616 24.2314C49.2573 23.5619 49.0138 22.8518 48.8312 22.1012C48.6487 21.3505 48.4661 20.6607 48.2835 20.052C48.1009 19.4028 47.8372 18.8956 47.5126 18.5304C47.2489 18.2058 46.8431 18.0435 46.4374 18.0435C46.2345 18.0435 46.1534 18.0638 46.0316 18.0841C45.4839 18.1449 45.3419 18.6521 44.713 19.626C44.3478 20.2144 43.8001 21.2896 43.4958 21.9592C43.4958 21.9592 43.2929 11.186 43.2929 10.5977C43.2929 10.5977 43.3538 9.80641 43.3538 9.60353C43.3538 9.36007 43.3132 9.2992 43.232 9.01517C43.2118 8.9543 43.1103 8.79199 42.8669 8.79199C42.5017 8.79199 41.7105 9.15718 41.5482 9.23834C41.5482 9.23834 41.4265 9.46151 41.4062 9.62382C41.3859 10.0296 41.4671 11.3483 41.4874 12.3222C41.5279 14.2699 41.5482 16.2378 41.5685 18.1855C41.5888 20.0926 41.5888 21.9186 41.5888 23.5822C41.3859 23.8054 41.1222 24.0894 40.8179 24.4343C40.4122 24.8604 39.3369 25.8342 39.3369 25.8342C39.3369 25.8342 38.4443 26.6458 38.0589 26.9704C37.6734 27.2747 37.2677 27.579 36.8416 27.8834C36.4359 28.1471 35.9896 28.3906 35.523 28.5934C35.0564 28.776 34.5289 28.9384 33.9406 29.0398C33.6972 29.0195 33.5146 28.9384 33.3929 28.8166C33.2711 28.6746 33.1494 28.5326 33.0886 28.35C32.8248 27.437 32.7843 26.6255 32.9668 25.956C33.1697 25.2662 33.4943 24.4343 33.9406 23.4605C34.3463 22.6084 34.813 21.8983 35.3404 21.3708C35.8679 20.8433 36.3548 20.4172 36.8011 20.0926C37.2677 19.7477 37.6328 19.5245 37.9169 19.3622C38.3023 19.1391 38.4646 18.8956 38.424 18.6319L38.4037 18.4898L38.2617 18.4695C37.6734 18.3478 37.0648 18.3478 36.4562 18.4695C35.8476 18.5913 35.1781 18.8956 34.4681 19.4028C33.9609 19.8289 33.4537 20.4578 32.9263 21.3302C32.4191 22.1823 31.9728 23.1359 31.6279 24.1503C31.283 25.1647 31.0599 26.1791 30.9787 27.2138C30.9787 27.2341 30.9787 27.2544 30.9787 27.2544C30.6947 27.4979 30.3904 27.7616 30.0455 28.066C29.6803 28.3906 29.2949 28.6543 28.8892 28.8978C28.5443 29.0804 28.2603 29.1007 28.0168 28.9384C27.7125 28.7558 27.4894 28.2891 27.4082 27.5993C27.3068 26.8486 27.2865 25.9965 27.3068 25.0633C27.3271 24.13 27.3879 23.1967 27.4894 22.2432C27.5908 21.2693 27.6719 20.4781 27.7328 19.8694L27.7531 19.7071L27.5908 19.6463C27.4894 19.626 27.3473 19.5854 27.1445 19.5448C26.9416 19.5043 26.759 19.5043 26.5562 19.5043C26.3533 19.5043 26.1707 19.5245 26.0084 19.5854C25.7853 19.6463 25.6432 19.8492 25.6432 20.1129V20.1332C25.7447 20.9244 25.6635 21.878 25.3998 22.9533C25.1158 24.0489 24.7709 25.1038 24.3449 26.0574C23.9188 27.0312 23.4928 27.8225 23.0465 28.4311C22.5596 29.1007 22.4176 29.1209 22.3568 29.1007C22.3162 29.1007 22.1539 29.0195 22.0322 28.6746C21.9307 28.4311 21.8699 28.1674 21.8293 27.9036C21.7887 27.6196 21.7684 27.3761 21.7481 27.1327C21.7279 26.8284 21.7279 26.6863 21.7279 26.6661C21.7076 24.7589 22.2147 19.0782 21.9104 17.6377L21.8902 17.5363L21.8699 17.4957C21.7684 17.3537 21.5656 17.2725 21.3221 17.1508C21.0787 17.0291 20.8555 16.8668 20.6526 16.8059C20.4295 16.8059 19.9629 16.8668 19.9629 16.9479Z" fill="#F8F8F9"/>
+<path d="M59.0358 31.3921C58.9547 31.6153 58.7924 31.9196 58.549 32.2239C58.2852 32.5688 58.0012 32.8731 57.6563 33.1369C57.3317 33.4006 56.9666 33.6035 56.6014 33.7455C56.2768 33.8673 55.9928 33.8673 55.7291 33.7658C55.6682 33.705 55.5871 33.5832 55.7291 33.2383C55.8508 32.8934 56.0537 32.5485 56.3377 32.163C56.6217 31.7978 56.9463 31.4124 57.3317 31.0472C57.6563 30.7226 57.9809 30.4588 58.2447 30.2356C58.4272 30.398 58.6301 30.5806 58.8127 30.8037C59.0358 31.0269 59.0967 31.2095 59.0358 31.3921ZM63.1135 22.5666C63.0932 23.0536 63.0121 25.7722 63.0121 25.7722C63.0121 25.8736 62.5455 25.9548 62.3426 26.0562C62.3426 26.0562 61.6529 26.462 61.3486 26.6446C61.0442 26.8272 60.6994 27.0301 60.3139 27.2533C59.9488 27.4561 59.5024 27.6996 58.9953 28.0039C58.5692 27.6996 58.0215 27.3953 57.352 27.0707C56.6623 26.746 55.9725 26.3809 55.2625 25.9751C54.5727 25.5896 53.9438 25.123 53.3961 24.6361C52.8483 24.1694 52.4629 23.5811 52.26 22.9521C52.0571 22.3435 52.1586 21.8565 52.544 21.4508C52.9498 21.0044 53.5178 20.6798 54.2278 20.4972C54.9379 20.3146 55.7291 20.2538 56.5608 20.3552C57.3926 20.4364 58.1026 20.6798 58.691 21.0856C58.9141 21.2276 59.1576 21.3696 59.3807 21.5319C59.543 21.6334 59.6647 21.6942 59.7865 21.6942C59.9285 21.6942 60.0502 21.5928 60.0908 21.4508L60.1111 21.3696L60.0705 21.2885C59.9285 21.045 59.7865 20.8016 59.6242 20.5378C59.4619 20.2538 59.2387 19.9697 58.9547 19.706C58.6707 19.4422 58.2852 19.1988 57.8186 18.9756C57.352 18.7524 56.7434 18.5901 56.0334 18.4684C55.2422 18.3467 54.4916 18.4075 53.7815 18.6307C53.0715 18.8539 52.4426 19.2191 51.9151 19.706C51.3877 20.1929 50.9616 20.7407 50.6776 21.3899C50.3936 22.0391 50.3124 22.7289 50.4342 23.3985C50.495 24.0477 50.8602 24.6969 51.5094 25.3259C52.118 25.9345 52.828 26.5026 53.6192 27.0301C54.3901 27.5576 55.1407 28.0445 55.8711 28.4706C56.4391 28.8155 56.8651 29.0995 57.1289 29.3632C56.8043 29.6473 56.4391 29.9719 56.0537 30.3168C55.5668 30.7429 55.1407 31.2095 54.7756 31.6761C54.3901 32.163 54.1264 32.6702 53.9641 33.1775C53.7815 33.7455 53.883 34.2933 54.2278 34.8208L54.2481 34.8411C54.5524 35.2266 54.9784 35.4903 55.4856 35.6324C55.7088 35.6932 55.9319 35.7135 56.1348 35.7135C56.3985 35.7135 56.6623 35.6729 56.8854 35.5715C57.494 35.3483 58.1635 34.9628 58.8735 34.4353C59.5836 33.8876 60.2328 33.1166 60.8211 32.1225C61.0443 31.6964 61.1051 31.2501 61.024 30.8443C60.9428 30.4588 60.8211 30.0733 60.6385 29.7284C60.4762 29.4241 60.2531 29.1401 59.9893 28.856C60.5168 28.4908 61.024 28.1459 61.4906 27.8416C62.018 27.4967 62.1398 27.233 62.3426 27.0707C62.5455 26.9286 62.8498 26.7663 62.8498 26.7663C62.8498 27.7807 62.8701 28.7546 62.9107 29.5458C62.9512 30.3574 63.2758 32.2645 63.6816 32.6297C64.067 33.1166 64.4525 33.2789 64.8988 33.3195C65.5682 33.3803 66.2986 32.7311 66.6232 32.3254C67.7389 30.9255 68.9359 27.9633 68.9359 27.9633C68.9562 28.1459 69.2808 30.7023 69.7676 31.4732C70.0719 31.9602 70.7414 32.1833 71.2892 32.0413C72.0398 31.8384 72.4861 31.3921 72.973 31.0675C73.4599 30.7226 74.5351 29.1604 74.6771 28.8357C74.6974 29.911 74.6974 31.3515 74.6771 32.5688C74.6771 32.7108 74.7177 32.9746 75.0625 33.0963C75.2046 33.1369 75.3263 33.1775 75.4683 33.1775C75.5494 33.1775 75.6103 33.1775 75.6914 33.1572C75.8943 33.1166 76.0972 33.076 76.2798 32.9746C76.5232 32.8528 76.6246 32.65 76.5841 32.4065C76.5232 32.1225 76.5232 31.737 76.5232 31.2298C76.5435 30.7023 76.5435 30.1748 76.5638 29.627C76.5841 29.0792 76.6044 28.5517 76.6449 28.0851C76.6652 27.8619 76.6855 27.659 76.7058 27.4967L76.7464 27.3547C76.9087 26.8272 77.1318 26.2388 77.3955 25.6099C77.6593 25.0012 77.9839 24.3926 78.4099 23.8448C78.8359 23.297 79.3228 22.8101 79.9111 22.4043C80.4792 21.9783 81.1689 21.7145 81.9398 21.5725C82.5484 21.4711 82.7716 21.329 82.9745 21.1262C83.157 20.9233 83.0962 20.6595 83.0962 20.3755V20.1726C83.0962 20.1726 83.0759 20.1523 83.0556 20.1523C82.6499 20.132 81.3312 20.0712 80.3169 20.3552C79.5054 20.5784 78.7953 20.8624 78.1867 21.3088C77.5984 21.7551 77.0912 22.2623 76.7261 22.871C76.5029 23.2159 76.3203 23.5811 76.1378 23.9665C76.0972 23.5608 76.0769 23.1753 76.0566 22.8507L75.9755 21.6942C75.9349 21.3088 75.8943 20.9233 75.8537 20.5378C75.7929 20.1523 75.7117 19.6045 75.6103 18.8944L75.59 18.7727L75.4886 18.7321C75.1437 18.5698 74.8597 18.4278 74.5757 18.3061C74.4539 18.2452 74.3525 18.2249 74.2511 18.2249C74.1091 18.2249 74.0279 18.2858 73.967 18.3467C73.8859 18.4481 73.8656 18.5698 73.8859 18.7321C74.0482 20.4769 74.2308 22.4449 74.4539 24.6361V24.6969C74.5554 25.7722 74.6162 26.9692 74.6568 28.2474C74.6365 28.2474 74.6162 28.2474 74.5959 28.2474C74.4336 28.2474 74.2308 28.3488 73.9468 28.6329C73.6222 28.9169 73.4193 29.1604 73.0541 29.5053C72.689 29.8502 71.8166 30.4791 71.5326 30.5197C71.0863 30.5805 70.8226 29.911 70.64 29.2212C70.4371 28.4503 70.3357 27.4967 70.2748 26.4823C70.214 25.5085 70.3154 24.494 70.4168 23.5202C70.498 22.6275 70.5791 21.7957 70.64 21.045C70.64 21.045 70.2545 20.761 70.0719 20.7204C69.8691 20.6798 69.6865 20.6798 69.5039 20.6798C69.301 20.6798 68.9967 20.7001 68.8344 20.761C68.6113 20.8421 68.5707 21.3696 68.5707 21.3696C68.5707 22.2014 68.6519 23.4796 68.3678 24.6158C68.1041 25.7519 67.7795 26.9489 67.3535 27.9633C66.9478 28.9778 66.6029 29.485 66.1769 30.1342C65.7103 30.824 65.3451 30.9052 65.3451 30.9052C64.9393 30.7429 64.8176 29.8299 64.7771 29.5256C64.7365 29.2212 64.7162 27.5982 64.7162 27.5576C64.7771 25.0621 64.8785 23.6825 64.9596 21.958C65.0611 20.1929 65.1219 19.077 64.9799 18.3669C64.9799 18.3669 64.5539 18.2046 64.2496 18.1235C64.0873 18.0626 63.783 17.9612 63.6004 17.9409C63.3975 17.9003 63.357 17.9409 63.1541 17.9409C63.1541 17.9409 63.1744 19.2596 63.1947 19.6857C63.1541 20.0915 63.1338 22.1 63.1135 22.5666Z" fill="#F8F8F9"/>
+<path d="M92.4894 16.4819C92.3271 16.2993 92.104 16.1978 91.9214 16.1573C91.9214 16.1573 91.2519 16.1573 90.9679 16.1776C90.6028 16.1978 89.0407 16.2587 89.0407 16.2587C88.7161 16.279 88.3306 16.2993 87.864 16.3196V16.1978C87.8843 15.9544 87.8843 15.6906 87.9046 15.3254C87.9249 14.2907 88.0263 13.3778 88.2495 12.5662C88.4726 11.775 88.7972 11.146 89.2435 10.6794C89.6696 10.2331 90.3999 10.1316 90.8868 10.091C91.3737 10.0505 91.7794 10.1925 92.0431 10.3751C92.3069 10.5577 92.6112 10.8417 92.8343 11.1257C92.8952 11.1866 92.9966 11.3489 92.9966 11.3489C93.1183 11.5721 93.2401 11.7344 93.3618 11.7953C93.3821 11.8764 93.4632 11.9779 93.6052 11.9981C93.6458 11.9981 94.011 11.9779 94.011 11.9779C94.011 11.9779 94.5587 11.8764 94.7819 11.8358C95.005 11.7953 95.0659 11.1055 94.5993 10.4968L94.5587 10.4157C94.2747 10.0302 93.9095 9.66498 93.5038 9.32008C92.8546 8.77229 92.0634 8.36652 91.1708 8.12306C90.2376 7.85931 89.2435 8.02162 88.1886 8.5897C87.7626 8.83316 87.3366 9.2795 86.9308 9.92873C86.5251 10.578 86.2005 11.5112 85.9976 12.7285C85.9773 12.8908 85.9368 13.0329 85.9165 13.1952C85.7542 14.1487 85.7136 14.94 85.6933 16.6036C85.6933 16.6036 83.9081 16.7659 83.2386 16.8471C82.0417 16.9688 81.7374 17.0297 81.5953 17.0702L81.5142 17.0905L81.4736 17.1717C81.4533 17.192 81.0679 17.76 80.9867 17.9224C80.9056 18.105 80.8447 18.3078 80.8447 18.4498C80.8447 18.5513 80.865 18.8353 81.3925 18.8556C81.8185 18.8556 82.3054 18.8556 82.6503 18.8353C82.9951 18.815 84.1921 18.6933 84.5572 18.673C84.8818 18.6527 85.2876 18.5919 85.7947 18.5716L85.9368 20.8033C86.1193 23.1365 86.2613 25.1044 86.3425 26.6666C86.4236 28.168 86.5048 29.4664 86.5454 30.5417C86.5859 31.2721 86.6874 31.9619 86.6874 32.0228C86.7077 32.388 86.7482 32.4691 86.8294 32.5503C86.9105 32.6111 87.012 32.5909 87.154 32.5909C87.4177 32.6111 88.2089 32.6517 88.2089 32.6517C88.5335 32.6517 88.7364 32.388 88.7364 32.1648C88.7364 31.9416 88.7161 31.4344 88.6349 31.3533C88.6146 31.3127 88.6552 31.2112 88.6349 30.9272C88.5538 29.9128 88.4523 28.8984 88.3712 27.8434C88.29 26.7884 88.2089 25.6725 88.1683 24.5161C88.148 23.5422 87.864 20.9656 87.864 20.6613L87.8843 18.389C88.3103 18.3687 88.7161 18.3484 89.0609 18.3281C89.4667 18.3078 91.4954 18.1658 91.4954 18.1658C91.9214 18.1455 92.388 18.0847 92.956 17.9832C93.0372 17.9832 93.0981 17.9426 93.1386 17.8818C93.2198 17.7803 93.1995 17.618 93.1589 17.4963C93.1183 17.3543 92.7329 16.7659 92.4894 16.4819Z" fill="#F8F8F9"/>
+<path d="M93.0369 15.4863C93.0775 15.5066 93.118 15.4863 93.118 15.4863C93.5644 15.4051 93.8484 15.2428 93.9701 14.9791C94.031 14.8574 94.6193 14.3501 94.6193 14.3501C94.8627 14.0864 94.9439 13.7212 94.883 13.2343C94.7816 12.5851 94.3961 12.5039 94.173 12.5039C94.1121 12.5039 94.0715 12.5039 93.9701 12.5242C93.8687 12.5445 93.0775 12.8894 92.6109 13.3966C92.2863 13.7415 92.1037 14.0864 91.9617 14.4313C91.9617 14.4313 91.9617 14.4516 91.9414 14.553C91.9414 14.6545 91.982 15.4457 92.5297 15.466C92.7529 15.4863 92.9963 15.466 93.0369 15.4863Z" fill="#F8F8F9"/>
+<path d="M95.0657 27.9239C94.9237 26.0777 94.8222 24.2923 94.7817 22.6286C94.7208 20.9244 94.6194 19.3622 94.4977 17.9623L94.4774 17.8203L94.3354 17.7797C94.0716 17.7188 93.8485 17.7188 93.6659 17.8C93.5036 17.8609 93.1993 18.1043 93.0167 18.4087C92.9558 18.4898 92.895 18.5507 92.8341 18.5912L92.7124 18.6521C92.7124 18.6521 92.8341 20.3766 92.9153 21.6548C92.9761 22.8518 93.0573 24.0894 93.1181 25.3676C93.179 26.5443 93.2399 27.721 93.321 28.918C93.3819 30.0339 93.5239 31.3729 93.5239 31.3729C93.5239 31.3729 93.9499 31.657 94.3354 31.8193C94.4977 31.8801 94.6802 31.9207 94.9034 31.9207C95.086 31.9207 95.2686 31.9004 95.4917 31.8598L95.6743 31.8193L95.654 31.6164C95.5932 31.1295 95.1671 28.8369 95.0657 27.9239Z" fill="#F8F8F9"/>
+<path d="M116.956 20.882C116.935 21.4095 116.793 21.9776 116.53 22.6065C116.367 23.0326 116.083 23.6007 115.738 24.2702C115.373 24.9803 114.927 25.6904 114.42 26.4005C113.913 27.1308 113.324 27.7598 112.695 28.3279C112.087 28.8756 111.417 29.2408 110.727 29.4031C110.525 29.4437 110.342 29.4437 110.22 29.3829C110.119 29.322 110.038 29.2611 110.038 29.2408C110.017 29.0785 109.977 28.7742 109.977 28.4902C109.977 28.2061 110.058 27.9221 110.18 27.496C110.301 27.07 110.504 26.5425 110.788 25.9541C111.052 25.3658 111.478 24.6962 111.985 23.9456C113.142 22.5457 114.237 21.5718 115.231 21.0849C115.941 20.74 116.53 20.5371 116.935 20.4965C116.976 20.6183 116.976 20.74 116.956 20.882ZM114.846 40.8255C114.197 42.408 114.197 42.9558 112.878 44.6194C112.188 45.2687 111.539 45.7556 110.727 46.0599C110.443 46.1816 110.2 46.2222 109.936 46.2222C109.51 46.2222 109.105 46.0802 108.719 45.7962C108.151 45.1266 108.212 44.5789 108.252 43.9499C108.293 43.2804 108.476 42.4892 108.78 41.5965C109.003 40.8052 109.449 39.9328 110.099 38.9793C110.748 38.0257 111.762 36.9098 113.101 35.6723C113.284 35.5302 115.15 33.7449 115.86 33.1565C115.86 33.2174 115.799 38.4923 114.846 40.8255ZM121.54 26.928L121.419 26.8062L121.277 26.9077C120.709 27.2729 120.181 27.6178 119.654 27.9627C119.228 28.267 118.802 28.5713 118.355 28.8959C118.132 29.0582 117.99 29.18 117.828 29.3017C117.889 28.8756 118.193 25.9338 118.335 25.0006C118.477 24.0064 118.639 22.7486 118.822 21.795C118.923 21.2269 119.045 19.969 119.167 19.969C119.167 19.969 119.349 19.7865 119.451 19.543L119.39 19.3604C118.923 19.0358 118.335 18.8532 117.625 18.8329C116.935 18.8126 116.246 18.8938 115.576 19.0358H115.556C114.907 19.2995 114.298 19.5836 113.791 19.8879C113.284 20.2125 112.858 20.5168 112.513 20.8212C112.168 21.1255 111.884 21.3892 111.661 21.653C111.458 21.8964 111.316 22.0385 111.275 22.079L111.255 22.0993C110.951 22.4645 110.606 22.9514 110.22 23.5601C109.855 24.1485 109.51 24.818 109.186 25.5281C108.861 26.2584 108.638 27.0091 108.476 27.7801C108.374 28.2467 108.354 28.6931 108.354 29.1394C108.131 29.0582 107.887 28.9365 107.644 28.7945C107.36 28.6119 107.137 28.3482 106.974 27.9627C106.589 27.0497 106.345 26.1773 106.224 25.3658C106.102 24.5339 106.001 23.763 105.879 23.0529C105.757 22.3428 105.575 21.7138 105.311 21.1661C105.027 20.5777 104.56 20.1516 103.891 19.8473C103.546 19.7053 103.14 19.8067 102.755 20.1314C102.41 20.4357 102.085 20.8212 101.761 21.3284C101.436 21.8356 101.152 22.4037 100.888 23.0529C100.625 23.6818 100.361 24.2905 100.138 24.8383C100.036 25.0614 99.9551 25.2846 99.8739 25.5078C99.8942 24.8585 99.9145 24.1687 99.9145 23.4384L99.9348 22.8297C99.9348 22.3022 99.8131 21.7341 99.8334 21.1661C99.8537 20.2937 99.7116 19.5227 99.7116 18.8126C99.7116 18.8126 99.7319 18.5894 99.7116 18.5691C99.6914 18.5489 99.6102 18.5286 99.4682 18.4474C99.3059 18.346 99.1436 18.2445 98.9813 18.1228C98.7987 17.9808 98.6162 17.9199 98.4336 17.9199C98.2916 17.9199 98.0278 18.0011 98.0278 18.5286C98.109 20.1719 98.1698 22.0993 98.2307 24.2905C98.2713 26.4816 98.0887 30.7016 98.0887 31.0059C98.0887 31.3103 98.0684 31.2697 98.109 31.432C98.1698 31.5943 98.6162 31.8783 98.7379 31.9392C98.8596 32.0001 99.7116 31.6754 99.7522 31.5943C99.7928 31.5131 99.874 31.2494 100.016 30.7422C100.158 30.2553 100.341 29.6872 100.584 28.9771C100.827 28.267 101.091 27.5366 101.375 26.7454C101.659 25.9338 101.964 25.2034 102.268 24.5542C102.572 23.905 102.876 23.3369 103.16 22.8906C103.465 22.4239 103.688 22.3022 103.81 22.2819C103.85 22.3022 103.952 22.4239 104.073 22.9109C104.215 23.3978 104.357 24.0267 104.56 24.818C104.743 25.5484 104.946 26.3396 105.169 27.1511C105.392 27.9627 105.696 28.6728 106.061 29.2814C106.447 29.9104 106.914 30.2958 107.461 30.4987C107.786 30.6002 108.151 30.5799 108.536 30.4581C108.577 30.5596 108.638 30.661 108.699 30.7422C108.8 30.9451 108.963 31.1074 109.186 31.2494C109.409 31.3914 109.673 31.4928 110.038 31.5334C110.748 31.6349 111.498 31.432 111.762 31.3508C112.087 31.2697 112.492 31.0871 112.979 30.7828C113.466 30.4784 113.994 30.0321 114.582 29.4234C115.028 28.9568 115.535 28.3684 115.941 27.6381C115.88 28.1047 115.88 28.6322 115.86 29.1191C115.84 29.8292 115.84 30.377 115.799 31.0262C115.312 31.432 114.785 31.858 114.46 32.1015C114.115 32.3855 113.507 32.913 113.223 33.1565C112.33 33.9275 111.904 34.3129 111.539 34.6781C111.316 34.9013 110.951 35.2665 110.301 35.9563C109.693 36.5852 109.084 37.3562 108.455 38.2489C107.826 39.1619 107.279 40.1763 106.812 41.2921C106.345 42.408 106.143 43.5644 106.203 44.7209C106.264 45.7759 106.508 46.5874 106.954 47.1149C107.4 47.6627 107.948 48.0076 108.577 48.1293C108.82 48.1902 109.084 48.2105 109.348 48.2105C109.754 48.2105 110.2 48.1496 110.646 48.0279C111.377 47.825 112.066 47.5207 112.736 47.1149C113.223 46.8106 113.608 46.5265 113.892 46.3034C114.176 46.0599 114.46 45.7759 114.704 45.4513C114.967 45.0861 115.191 44.7615 115.414 44.4571C115.637 44.1528 115.84 43.7876 116.043 43.321C116.246 42.8746 116.448 42.2863 116.631 41.5965C116.814 40.9067 116.996 39.9734 117.158 38.8575C117.3 37.8634 117.382 36.8693 117.463 35.8751C117.524 34.881 117.787 32.629 117.848 31.6754C117.848 31.6552 118.213 31.2697 118.721 30.7625C119.289 30.1741 119.917 29.5249 120.546 28.7945C120.607 28.7336 120.729 28.6119 120.83 28.4699C120.972 28.2873 121.094 28.125 121.216 27.983C121.358 27.8004 121.459 27.6381 121.54 27.4757C121.703 27.1714 121.622 27.0091 121.54 26.928Z" fill="#F8F8F9"/>
+</g>
+<defs>
+<clipPath id="clip0_8149_3855">
+<rect width="122" height="48" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/brands/deliveryhero.svg b/src/assets/brands/deliveryhero.svg
new file mode 100644
index 00000000..35199298
--- /dev/null
+++ b/src/assets/brands/deliveryhero.svg
@@ -0,0 +1,23 @@
+<svg width="173" height="48" viewBox="0 0 173 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_8149_3824)">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M32.1799 23.3826L32.1589 23.3946L28.4049 24.9256L28.2899 24.9786L27.3749 29.1586C27.3139 29.3016 27.1309 29.3356 27.0079 29.2166L24.2729 25.9826L24.2599 25.9726L8.83691 32.5906C8.81388 32.6006 8.78797 32.6018 8.76408 32.5941C8.74018 32.5863 8.71994 32.5701 8.70716 32.5485C8.69438 32.5269 8.68995 32.5013 8.69469 32.4767C8.69943 32.452 8.71303 32.4299 8.73291 32.4146L22.0659 22.4346L20.3789 18.5826C20.2949 18.4076 20.4499 18.2206 20.6559 18.2726H20.6579L24.7439 19.2786L27.9159 16.4556C28.0529 16.3486 28.2389 16.4256 28.2739 16.5956L28.5839 20.8366L32.2419 22.9776C32.3989 23.0776 32.3759 23.3096 32.1799 23.3826ZM30.3159 11.2576C25.5819 9.39957 20.3759 10.7946 17.1639 14.3646L4.62991 27.7926C4.46091 27.9736 4.53991 28.2006 4.74491 28.2306L8.08491 28.4356C8.35191 28.4526 8.38491 28.6826 8.25091 28.8396L0.0859119 37.6456C-0.0560881 37.7976 0.115912 38.0376 0.309912 37.9776L11.9659 34.2946C12.2119 34.2096 12.4019 34.4296 12.2979 34.6226L10.7379 37.3786C10.6579 37.5356 10.8089 37.7506 11.0049 37.7366L27.8089 33.9936C31.8239 33.3576 35.4089 30.6776 37.0019 26.6196C39.4019 20.5296 36.4039 13.6526 30.3159 11.2576Z" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M75.3617 31.69H71.5327L74.5297 17.658L78.7057 16.123L75.3627 31.688" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M67.1379 23.653C66.2209 23.653 65.6939 24.412 65.4799 25.291C67.2929 25.291 67.8419 24.725 67.8419 24.255C67.8419 23.925 67.5469 23.653 67.1379 23.653ZM65.0509 27.749C65.0309 27.845 65.0109 28.023 65.0109 28.119C65.0109 28.744 65.4389 28.959 66.5729 28.959C67.5859 28.959 69.0289 28.704 69.8699 28.413V31.281C68.7969 31.671 67.1169 31.884 65.7699 31.884C62.6099 31.884 61.0879 31.025 61.0879 28.159C61.0879 25.345 62.3949 20.958 67.4319 20.958C70.6299 20.958 71.5849 22.403 71.5849 23.926C71.5849 25.896 69.8889 27.573 65.0509 27.749Z" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M82.3159 20.455C81.0109 20.455 80.1709 19.616 80.1709 18.465C80.1709 16.962 81.2249 16.124 82.5299 16.124C83.8579 16.124 84.6779 16.962 84.6779 18.094C84.6779 19.616 83.6439 20.455 82.3159 20.455Z" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M79.6301 21.3096H83.5701L81.5781 31.5336H77.5981L79.0001 24.3536" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M94.9251 21.3096C93.5581 24.7446 92.0551 28.0996 90.1451 31.5336H85.2651C84.6421 28.2936 84.3671 24.8796 84.4471 21.3096H88.4281C88.3523 22.9737 88.3643 24.6407 88.4641 26.3036C88.4851 26.7336 88.5251 27.1416 88.5631 27.5546H88.5851C88.7591 27.1416 88.9531 26.7346 89.1301 26.3036C89.8121 24.6236 90.4361 22.7936 90.9071 21.3096H94.9251Z" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M100.252 23.653C99.3371 23.653 98.8071 24.412 98.5911 25.291C100.408 25.291 100.954 24.725 100.954 24.255C100.954 23.925 100.664 23.653 100.252 23.653ZM98.1661 27.749C98.1423 27.871 98.1282 27.9948 98.1241 28.119C98.1241 28.744 98.5551 28.959 99.6851 28.959C100.701 28.959 102.145 28.704 102.984 28.413V31.281C101.91 31.671 100.232 31.884 98.8871 31.884C95.7241 31.884 94.2031 31.025 94.2031 28.159C94.2031 25.345 95.5091 20.958 100.544 20.958C103.744 20.958 104.699 22.403 104.699 23.926C104.699 25.896 103.005 27.573 98.1661 27.749Z" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M112.351 24.92C112.037 24.845 111.716 24.8048 111.394 24.8C110.515 24.8 109.813 25.68 109.499 27.3L108.683 31.535H104.7L106.693 21.311H109.68L109.776 22.674C110.692 21.544 111.416 20.958 112.528 20.958C113.034 20.958 113.308 20.997 113.443 21.036L112.352 24.919" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M124.799 21.3096C123.041 25.8766 121.481 29.2116 119.919 31.5166C117.657 34.8926 115.665 35.6736 113.615 35.6736C113.01 35.6736 112.368 35.5136 112.054 35.3596L112.68 32.4126H114.046C114.729 32.4126 115.02 32.1376 115.47 31.5336C114.709 28.7836 114.337 24.9396 114.376 21.3096H118.378C118.3 22.9544 118.313 24.6022 118.417 26.2456C118.437 26.6936 118.473 27.1236 118.512 27.5546H118.532C118.709 27.1416 118.902 26.7346 119.079 26.2846C119.744 24.6579 120.324 22.9973 120.815 21.3096H124.799Z" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M140.1 31.5331H135.9L136.897 26.3801H133.344L132.347 31.5331H128.155L130.807 17.9131H135.004L134.049 22.7731H137.6L138.557 17.9131H142.75L140.099 31.5331" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M148.37 23.653C147.452 23.653 146.928 24.412 146.712 25.291C148.527 25.291 149.076 24.725 149.076 24.255C149.076 23.925 148.78 23.653 148.37 23.653ZM146.282 27.749C146.26 27.8712 146.247 27.9949 146.245 28.119C146.245 28.744 146.675 28.959 147.804 28.959C148.82 28.959 150.264 28.704 151.103 28.413V31.281C150.03 31.671 148.351 31.884 147.003 31.884C143.843 31.884 142.321 31.025 142.321 28.159C142.321 25.345 143.628 20.958 148.663 20.958C151.863 20.958 152.821 22.403 152.821 23.926C152.821 25.896 151.121 27.573 146.282 27.749Z" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M160.467 24.92C160.154 24.8447 159.834 24.8045 159.513 24.8C158.636 24.8 157.932 25.68 157.62 27.3L156.8 31.535H152.821L154.809 21.311H157.794L157.894 22.674C158.81 21.544 159.531 20.958 160.642 20.958C161.152 20.958 161.424 20.997 161.562 21.036L160.467 24.919" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M167.006 24.1C165.406 24.1 164.976 26.54 164.976 27.633C164.976 28.51 165.346 28.763 166.071 28.763C167.648 28.763 168.059 26.323 168.059 25.213C168.059 24.355 167.709 24.1 167.006 24.1ZM165.521 31.884C162.419 31.884 160.899 30.557 160.899 27.904C160.899 24.957 162.361 20.958 167.514 20.958C170.598 20.958 172.138 22.324 172.138 24.94C172.138 27.945 170.674 31.884 165.521 31.884Z" fill="#F8F8F9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M52.5429 28.2931H51.7619L53.1659 21.1111H54.2609C55.9179 21.1111 56.5229 22.0911 56.5229 23.4341C56.5229 26.1491 55.0189 28.2931 52.5429 28.2931ZM56.2619 21.3661L58.9139 18.8211C57.8789 18.1981 56.4589 17.9131 54.6869 17.9131H49.6139L46.9629 31.5341H52.2519C58.3959 31.5341 60.8529 27.2411 60.8529 22.7741C60.8529 21.6131 60.6029 20.6841 60.1209 19.9641L56.2619 21.3661Z" fill="#F8F8F9"/>
+</g>
+<defs>
+<clipPath id="clip0_8149_3824">
+<rect width="173" height="28" fill="white" transform="translate(0 10)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/brands/flash-co.png b/src/assets/brands/flash-co.png
deleted file mode 100644
index 212bb219..00000000
Binary files a/src/assets/brands/flash-co.png and /dev/null differ
diff --git a/src/assets/brands/invoice-home.png b/src/assets/brands/invoice-home.png
deleted file mode 100644
index c398f85e..00000000
Binary files a/src/assets/brands/invoice-home.png and /dev/null differ
diff --git a/src/assets/brands/jundlegames.svg b/src/assets/brands/jundlegames.svg
new file mode 100644
index 00000000..211fcece
--- /dev/null
+++ b/src/assets/brands/jundlegames.svg
@@ -0,0 +1,14 @@
+<svg width="54" height="48" viewBox="0 0 54 48" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g clip-path="url(#clip0_8149_3881)">
+<rect width="54" height="48" fill="url(#pattern0_8149_3881)"/>
+</g>
+<defs>
+<pattern id="pattern0_8149_3881" patternContentUnits="objectBoundingBox" width="1" height="1">
+<use xlink:href="#image0_8149_3881" transform="matrix(0.00680272 0 0 0.00765306 0 -0.00127551)"/>
+</pattern>
+<clipPath id="clip0_8149_3881">
+<rect width="54" height="48" fill="white"/>
+</clipPath>
+<image id="image0_8149_3881" width="147" height="131" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJMAAACDCAMAAAC+7dm8AAAArlBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8tivQqAAAAOXRSTlMAY0c3Phf38thOB+qSCpyW5biEf+7hJfsT3cRsUw96i8hCczoyqrQq0V2voY5ZTBsEvqbViB/MZy5pLFWeAAAI/UlEQVR42szZ2XKiQACF4eMSSSQYFwyIC8bdjEvUGD3v/2JjoAOIk5me0ArfHYXLX0B3QQMlCq6ja7rjFpAVo1d+eR0hC54rjKo8I213C4vnrMUd0mQ0NF7SGgZS067yz6ptpGN+z+/dz3F7qz7/rr/CbRVr/LdaEbdzHDN0bzLkHNobhsZH3Mb+iaGP902JgcnFWX3a4/ps12KglFttGCoZ8Cx3DFiujesq90yGFvaDxogxvhxaDJi9Mq7o0GRoskaFZwYIvA10BpoHqHd5Sth/wbTKczlEdOslBnZLXEPe4fl/9MjLpqj1I0NOHqoNaww120B3w380xe8ZJkOoNN0yZPYMYGVSoik2lW2nUMV+ZHxs10mJpssp/9GGEh0zfsu23lCqSVg5DJgdKJBjaDzCyYNJ2SZhOYt+KLECA7UXfGrwOzmpma2ApKoUqh14XP6kCeUnClUkNKfgdOHpUKqpiwsDCnMk06dvBl+5JNXkmrMj4lz6+kjEtuix7uBrU6ZpQFIzEHcvfsxGEkP66hD6Mk2GxZMG4lb0DZFEnh6rGxw3maYlP7W+HTB5FU0TCCPKNIkhtkdcRWFTA8JQqqlGzwt8+8c2fAOFTTkIBakmh54HeAw92DNPr2lDzyoyCN/wKZde05ieUWSoFtNu6kWfYt50nrTTbppGB2tX40kv7SY4kZmxnI3jhLVOLiB8eBmpN+FusMSXOknLSL8pyibZQ7aaUKi5yFqTcN2m3aGVuaYjillragHQM9bUB7DLWJMOvGkZa2IOg6xdT7Qm2ZsLBOmmdfaaGtbOzlhTgeQk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"/>
+</defs>
+</svg>
diff --git a/src/assets/brands/junglee.png b/src/assets/brands/junglee.png
deleted file mode 100644
index e92c2983..00000000
Binary files a/src/assets/brands/junglee.png and /dev/null differ
diff --git a/src/assets/brands/kalshi.png b/src/assets/brands/kalshi.png
deleted file mode 100644
index 17fa4ed0..00000000
Binary files a/src/assets/brands/kalshi.png and /dev/null differ
diff --git a/src/assets/brands/kalshi.svg b/src/assets/brands/kalshi.svg
new file mode 100644
index 00000000..613f4239
--- /dev/null
+++ b/src/assets/brands/kalshi.svg
@@ -0,0 +1,16 @@
+<svg width="84" height="48" viewBox="0 0 84 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_8149_3906)">
+<path d="M43.1694 13H38.8887V34.0285H43.1694V13Z" fill="white"/>
+<path d="M1.43848 13.0234H5.98264V22.4568L14.4782 13.0234H19.9883L12.1952 21.6707L20.4932 34.0302H15.049L8.99013 25.1646L5.98264 28.5055V34.0302H1.43848V13.0234Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M37.2427 33.8317H35.0694C33.1156 33.8317 32.1497 32.9799 32.1937 31.2986C31.6228 32.1721 30.9204 32.8489 30.1081 33.3075C29.274 33.7661 28.2861 34.0063 27.1006 34.0063C25.3664 34.0063 23.9615 33.6133 22.8858 32.8272C21.8321 32.0192 21.3052 30.9055 21.3052 29.4642C21.3052 27.8265 21.9199 26.56 23.1272 25.6866C24.3566 24.7913 26.1347 24.3327 28.4617 24.3327H31.557V23.5903C31.557 22.8915 31.2936 22.3456 30.7667 21.9307C30.2399 21.5158 29.5374 21.2974 28.6373 21.2974C27.847 21.2974 27.2104 21.4721 26.7055 21.7997C26.2005 22.1491 25.8933 22.6076 25.8055 23.1754H21.6564C21.7881 21.6031 22.5126 20.3803 23.7858 19.5068C25.059 18.6334 26.7494 18.1748 28.8568 18.1748C31.0521 18.1748 32.7644 18.6552 33.9498 19.616C35.1572 20.5768 35.7719 21.9744 35.7719 23.7868V29.2241C35.7719 29.5953 35.8597 29.8574 36.0133 30.0102C36.167 30.1412 36.4305 30.2286 36.7817 30.2286H37.2427V33.8317ZM28.4178 27.1496C27.5397 27.1496 26.8372 27.3243 26.3323 27.6955C25.8493 28.0449 25.6079 28.5254 25.6079 29.1586C25.6079 29.7045 25.8055 30.1194 26.2225 30.447C26.6396 30.7745 27.2104 30.9273 27.9129 30.9273C29.0324 30.9273 29.9105 30.6216 30.5472 29.9884C31.1838 29.3551 31.535 28.5035 31.557 27.4335V27.1496H28.4178Z" fill="white"/>
+<path d="M48.8553 28.7003C48.9211 29.3773 49.2504 29.9232 49.865 30.3599C50.4797 30.7749 51.248 30.9932 52.192 30.9932C53.0921 30.9932 53.8164 30.8622 54.3434 30.5783C54.8702 30.2726 55.1337 29.8577 55.1337 29.3118C55.1337 28.9187 55.0019 28.613 54.7605 28.4164C54.5189 28.2199 54.1677 28.0671 53.7286 28.0016C53.2896 27.8924 52.5652 27.7832 51.5554 27.6741C50.1724 27.4993 49.0309 27.2592 48.1308 26.9753C47.2307 26.6914 46.4843 26.2547 45.9575 25.6432C45.4086 25.0319 45.1452 24.2457 45.1452 23.2412C45.1452 22.2368 45.4086 21.3633 45.9575 20.599C46.5283 19.8129 47.3186 19.2233 48.3283 18.7866C49.3382 18.3717 50.5017 18.1533 51.8188 18.1533C53.9482 18.1752 55.6385 18.6337 56.9337 19.5072C58.2508 20.3806 58.9533 21.6035 59.0631 23.1757H55.0019C54.9361 22.5861 54.6287 22.1276 54.058 21.7563C53.5091 21.3851 52.8067 21.1886 51.9286 21.1886C51.1163 21.1886 50.4577 21.3415 49.9528 21.6472C49.4699 21.9529 49.2284 22.3459 49.2284 22.8482C49.2284 23.2194 49.3601 23.4814 49.6236 23.6561C49.887 23.8309 50.2382 23.9619 50.6553 24.0491C51.0725 24.1365 51.7968 24.2239 52.7847 24.3112C54.8921 24.5514 56.4947 25.01 57.5923 25.6651C58.7338 26.2983 59.2827 27.4121 59.2827 29.0061C59.2827 30.0105 58.9753 30.884 58.3826 31.6483C57.7899 32.4126 56.9777 33.0021 55.902 33.4171C54.8483 33.8101 53.6189 34.0285 52.2359 34.0285C50.0846 34.0285 48.3064 33.5481 46.9673 32.6091C45.6062 31.6483 44.9037 30.3381 44.8159 28.7003H48.8553Z" fill="white"/>
+<path d="M74.3426 20.075C73.1573 18.9614 71.6645 18.3936 69.8204 18.3936C67.9106 18.3936 66.3739 19.0924 65.2104 20.4899V13H60.9297V34.0285H65.2104V26.1019C65.2104 24.7699 65.4958 23.7436 66.1104 23.0011C66.7251 22.2587 67.5813 21.8875 68.6789 21.8875C69.7326 21.8875 70.5229 22.2368 71.0497 22.9138C71.5766 23.5688 71.8401 24.5297 71.8401 25.818V34.0285H76.1208V25.6433C76.1208 23.0448 75.5281 21.1887 74.3426 20.075Z" fill="white"/>
+<path d="M77.7666 18.5684H82.0474V34.0068H77.7666V18.5684Z" fill="white"/>
+<path d="M81.4112 13.6114C81.016 13.2184 80.5111 13 79.8964 13C79.3038 13 78.7768 13.2184 78.3597 13.6114C77.9646 14.0045 77.7451 14.4849 77.7451 15.0745C77.7451 15.6641 77.9646 16.1663 78.3597 16.5594C78.7768 16.9524 79.3038 17.1708 79.8964 17.1708C80.4891 17.1708 81.016 16.9742 81.4112 16.5594C81.8063 16.1445 82.0258 15.6641 82.0258 15.0745C82.0258 14.4849 81.8063 13.9826 81.4112 13.6114Z" fill="white"/>
+</g>
+<defs>
+<clipPath id="clip0_8149_3906">
+<rect width="82.017" height="21.03" fill="white" transform="translate(1 13)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/brands/kijiji.png b/src/assets/brands/kijiji.png
deleted file mode 100644
index 09141091..00000000
Binary files a/src/assets/brands/kijiji.png and /dev/null differ
diff --git a/src/assets/brands/pushpress.png b/src/assets/brands/pushpress.png
deleted file mode 100644
index d16bad94..00000000
Binary files a/src/assets/brands/pushpress.png and /dev/null differ
diff --git a/src/assets/brands/solides.png b/src/assets/brands/solides.png
deleted file mode 100644
index 015bdb59..00000000
Binary files a/src/assets/brands/solides.png and /dev/null differ
diff --git a/src/assets/brands/solides.svg b/src/assets/brands/solides.svg
new file mode 100644
index 00000000..38ad6f2f
--- /dev/null
+++ b/src/assets/brands/solides.svg
@@ -0,0 +1,9 @@
+<svg width="94" height="48" viewBox="0 0 94 48" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<rect y="12" width="94" height="23" fill="url(#pattern0_8149_3890)"/>
+<defs>
+<pattern id="pattern0_8149_3890" patternContentUnits="objectBoundingBox" width="1" height="1">
+<use xlink:href="#image0_8149_3890" transform="matrix(0.000618429 0 0 0.00252749 0 -0.0017074)"/>
+</pattern>
+<image id="image0_8149_3890" width="1617" height="397" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/>
+</defs>
+</svg>
diff --git a/src/assets/brands/tracker.png b/src/assets/brands/tracker.png
deleted file mode 100644
index c7c428c9..00000000
Binary files a/src/assets/brands/tracker.png and /dev/null differ
diff --git a/src/assets/brands/tradeling.png b/src/assets/brands/tradeling.png
deleted file mode 100644
index bd29d0b2..00000000
Binary files a/src/assets/brands/tradeling.png and /dev/null differ
diff --git a/src/assets/features/all-platforms.png b/src/assets/features/all-platforms.png
deleted file mode 100644
index af6043a0..00000000
Binary files a/src/assets/features/all-platforms.png and /dev/null differ
diff --git a/src/assets/features/any-code.png b/src/assets/features/any-code.png
deleted file mode 100644
index 65a681c5..00000000
Binary files a/src/assets/features/any-code.png and /dev/null differ
diff --git a/src/assets/features/compliance.png b/src/assets/features/compliance.png
deleted file mode 100644
index 282c2f6b..00000000
Binary files a/src/assets/features/compliance.png and /dev/null differ
diff --git a/src/assets/features/quick-fix.png b/src/assets/features/quick-fix.png
deleted file mode 100644
index 3eb504b5..00000000
Binary files a/src/assets/features/quick-fix.png and /dev/null differ
diff --git a/src/assets/features/releases.png b/src/assets/features/releases.png
deleted file mode 100644
index 8b464f45..00000000
Binary files a/src/assets/features/releases.png and /dev/null differ
diff --git a/src/assets/features/rollback.png b/src/assets/features/rollback.png
deleted file mode 100644
index d82f01ac..00000000
Binary files a/src/assets/features/rollback.png and /dev/null differ
diff --git a/src/assets/features/social-proof.png b/src/assets/features/social-proof.png
deleted file mode 100644
index 6ebaa5aa..00000000
Binary files a/src/assets/features/social-proof.png and /dev/null differ
diff --git a/src/assets/home/bug-fix-timeline.webp b/src/assets/home/bug-fix-timeline.webp
new file mode 100644
index 00000000..f1157628
Binary files /dev/null and b/src/assets/home/bug-fix-timeline.webp differ
diff --git a/src/assets/home/enterprise-globe.webp b/src/assets/home/enterprise-globe.webp
new file mode 100644
index 00000000..fa7023c9
Binary files /dev/null and b/src/assets/home/enterprise-globe.webp differ
diff --git a/src/assets/home/flutter-apps-logo.svg b/src/assets/home/flutter-apps-logo.svg
new file mode 100644
index 00000000..035901bf
--- /dev/null
+++ b/src/assets/home/flutter-apps-logo.svg
@@ -0,0 +1,24 @@
+<svg width="290" height="64" viewBox="0 0 290 64" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g clip-path="url(#clip0_8087_13130)">
+<path d="M61.8203 26.5449H15.6362V62.5469H61.8203V26.5449Z" fill="url(#pattern0_8087_13130)"/>
+<path d="M55.6904 29.54H35.9985L18.7705 46.7722L28.6145 56.6161L55.6904 29.54Z" fill="#54C5F8"/>
+<path d="M13.848 41.8481L4 32.0001L36 0H55.692L13.848 41.8481Z" fill="#54C5F8"/>
+<path d="M28.6162 56.6164L36.0002 64.0003H55.6921L38.4602 46.7725L28.6162 56.6164Z" fill="#01579B"/>
+<path d="M28.6162 56.6164L43.2199 51.5609L38.4602 46.7725L28.6162 56.6164Z" fill="url(#paint0_linear_8087_13130)"/>
+<path d="M28.6148 36.9229L18.7705 46.767L28.6148 56.6114L38.4589 46.767L28.6148 36.9229Z" fill="#29B6F6"/>
+</g>
+<path d="M81.52 47H77.12V18.28H94.56V22.12H81.52V31.48H92.64V35.32H81.52V47ZM101.838 47H97.7578V18.28H101.838V47ZM119.885 38.28V25.8H123.925V47H120.165V43.68C119.632 44.7467 118.779 45.64 117.605 46.36C116.432 47.0533 115.125 47.4 113.685 47.4C112.272 47.4 111.005 47.12 109.885 46.56C108.792 46 107.939 45.1333 107.325 43.96C106.739 42.76 106.445 41.2533 106.445 39.44V25.8H110.485V38.64C110.485 40.48 110.899 41.8133 111.725 42.64C112.552 43.44 113.632 43.84 114.965 43.84C115.872 43.84 116.699 43.6133 117.445 43.16C118.192 42.68 118.779 42.0267 119.205 41.2C119.659 40.3467 119.885 39.3733 119.885 38.28ZM140.696 43.08V46.64C140.083 46.9333 139.483 47.1333 138.896 47.24C138.336 47.3467 137.736 47.4 137.096 47.4C135.789 47.4 134.629 47.16 133.616 46.68C132.629 46.2 131.856 45.4533 131.296 44.44C130.736 43.4267 130.456 42.1467 130.456 40.6V29.24H125.776V25.8H130.456V19.52H134.496V25.8H140.896V29.24H134.496V39.68C134.496 41.1467 134.816 42.1733 135.456 42.76C136.123 43.3467 136.989 43.64 138.056 43.64C138.536 43.64 138.989 43.6 139.416 43.52C139.869 43.4133 140.296 43.2667 140.696 43.08ZM156.615 43.08V46.64C156.001 46.9333 155.401 47.1333 154.815 47.24C154.255 47.3467 153.655 47.4 153.015 47.4C151.708 47.4 150.548 47.16 149.535 46.68C148.548 46.2 147.775 45.4533 147.215 44.44C146.655 43.4267 146.375 42.1467 146.375 40.6V29.24H141.695V25.8H146.375V19.52H150.415V25.8H156.815V29.24H150.415V39.68C150.415 41.1467 150.735 42.1733 151.375 42.76C152.041 43.3467 152.908 43.64 153.975 43.64C154.455 43.64 154.908 43.6 155.335 43.52C155.788 43.4133 156.215 43.2667 156.615 43.08ZM168.004 47.4C165.951 47.4 164.151 46.9467 162.604 46.04C161.084 45.1067 159.898 43.8 159.044 42.12C158.191 40.44 157.764 38.4933 157.764 36.28C157.764 34.1733 158.204 32.3067 159.084 30.68C159.964 29.0533 161.164 27.7733 162.684 26.84C164.204 25.88 165.938 25.4 167.884 25.4C169.484 25.4 170.911 25.7067 172.164 26.32C173.444 26.9067 174.524 27.7467 175.404 28.84C176.311 29.9067 176.964 31.1733 177.364 32.64C177.764 34.08 177.871 35.6667 177.684 37.4H160.124V34.72H173.404C173.324 32.7467 172.778 31.2133 171.764 30.12C170.778 29 169.458 28.44 167.804 28.44C166.604 28.44 165.551 28.76 164.644 29.4C163.764 30.0133 163.071 30.9067 162.564 32.08C162.084 33.2267 161.844 34.6267 161.844 36.28C161.844 37.9333 162.084 39.36 162.564 40.56C163.044 41.7333 163.738 42.64 164.644 43.28C165.551 43.92 166.644 44.24 167.924 44.24C169.444 44.24 170.698 43.8533 171.684 43.08C172.698 42.3067 173.364 41.2267 173.684 39.84H177.684C177.178 42.1867 176.058 44.04 174.324 45.4C172.618 46.7333 170.511 47.4 168.004 47.4ZM185.22 36.16V47H181.18V25.8H184.94V30.28C185.686 28.8133 186.793 27.6533 188.26 26.8C189.753 25.9467 191.366 25.52 193.1 25.52V29.72C191.58 29.64 190.22 29.8133 189.02 30.24C187.846 30.6667 186.913 31.3733 186.22 32.36C185.553 33.32 185.22 34.5867 185.22 36.16ZM215.896 47V43.72C215.23 44.8933 214.323 45.8 213.176 46.44C212.03 47.08 210.67 47.4 209.096 47.4C206.91 47.4 205.15 46.8267 203.816 45.68C202.483 44.5067 201.816 42.9467 201.816 41C201.816 38.92 202.63 37.3467 204.256 36.28C205.91 35.2133 208.31 34.68 211.456 34.68C212.07 34.68 212.67 34.6933 213.256 34.72C213.843 34.7467 214.563 34.8133 215.416 34.92V33.36C215.416 31.8667 215.03 30.7067 214.256 29.88C213.483 29.0267 212.39 28.6 210.976 28.6C209.51 28.6 208.336 29.0267 207.456 29.88C206.603 30.7067 206.15 31.8533 206.096 33.32H202.416C202.47 31.72 202.856 30.3333 203.576 29.16C204.323 27.96 205.323 27.04 206.576 26.4C207.856 25.7333 209.323 25.4 210.976 25.4C213.59 25.4 215.616 26.1067 217.056 27.52C218.523 28.9067 219.256 30.8667 219.256 33.4V47H215.896ZM205.656 40.88C205.656 41.9733 206.043 42.8533 206.816 43.52C207.59 44.1867 208.616 44.52 209.896 44.52C211.603 44.52 212.95 44.04 213.936 43.08C214.923 42.0933 215.416 40.7867 215.416 39.16V37.44C214.643 37.36 213.963 37.3067 213.376 37.28C212.79 37.2267 212.23 37.2 211.696 37.2C209.67 37.2 208.15 37.5067 207.136 38.12C206.15 38.7067 205.656 39.6267 205.656 40.88ZM244.098 36.4C244.098 38.5333 243.711 40.4267 242.938 42.08C242.164 43.7333 241.071 45.04 239.658 46C238.271 46.9333 236.631 47.4 234.738 47.4C233.298 47.4 231.991 47.0533 230.818 46.36C229.644 45.6667 228.671 44.68 227.898 43.4V54.72H223.858V25.8H227.618V29.68C228.364 28.32 229.364 27.2667 230.618 26.52C231.871 25.7733 233.244 25.4 234.738 25.4C236.631 25.4 238.271 25.88 239.658 26.84C241.071 27.7733 242.164 29.0667 242.938 30.72C243.711 32.3733 244.098 34.2667 244.098 36.4ZM239.898 36.4C239.898 34.0267 239.324 32.2 238.178 30.92C237.058 29.6133 235.631 28.96 233.898 28.96C232.778 28.96 231.764 29.2533 230.858 29.84C229.951 30.4267 229.231 31.2667 228.698 32.36C228.164 33.4533 227.898 34.8 227.898 36.4C227.898 37.9467 228.164 39.28 228.698 40.4C229.231 41.4933 229.951 42.3333 230.858 42.92C231.764 43.5067 232.778 43.8 233.898 43.8C235.631 43.8 237.058 43.16 238.178 41.88C239.324 40.6 239.898 38.7733 239.898 36.4ZM267.634 36.4C267.634 38.5333 267.247 40.4267 266.474 42.08C265.7 43.7333 264.607 45.04 263.194 46C261.807 46.9333 260.167 47.4 258.274 47.4C256.834 47.4 255.527 47.0533 254.354 46.36C253.18 45.6667 252.207 44.68 251.434 43.4V54.72H247.394V25.8H251.154V29.68C251.9 28.32 252.9 27.2667 254.154 26.52C255.407 25.7733 256.78 25.4 258.274 25.4C260.167 25.4 261.807 25.88 263.194 26.84C264.607 27.7733 265.7 29.0667 266.474 30.72C267.247 32.3733 267.634 34.2667 267.634 36.4ZM263.434 36.4C263.434 34.0267 262.86 32.2 261.714 30.92C260.594 29.6133 259.167 28.96 257.434 28.96C256.314 28.96 255.3 29.2533 254.394 29.84C253.487 30.4267 252.767 31.2667 252.234 32.36C251.7 33.4533 251.434 34.8 251.434 36.4C251.434 37.9467 251.7 39.28 252.234 40.4C252.767 41.4933 253.487 42.3333 254.394 42.92C255.3 43.5067 256.314 43.8 257.434 43.8C259.167 43.8 260.594 43.16 261.714 41.88C262.86 40.6 263.434 38.7733 263.434 36.4ZM287.73 40.68C287.73 42.76 286.956 44.4 285.41 45.6C283.863 46.8 281.676 47.4 278.85 47.4C276.076 47.4 273.876 46.7467 272.25 45.44C270.65 44.1333 269.743 42.3467 269.53 40.08H273.41C273.463 41.4133 273.983 42.4667 274.97 43.24C275.983 43.9867 277.303 44.36 278.93 44.36C280.343 44.36 281.476 44.1067 282.33 43.6C283.21 43.0933 283.65 42.3467 283.65 41.36C283.65 40.48 283.356 39.8133 282.77 39.36C282.21 38.9067 281.263 38.56 279.93 38.32L276.49 37.68C274.543 37.3067 273.036 36.6267 271.97 35.64C270.903 34.6267 270.37 33.32 270.37 31.72C270.37 30.4667 270.703 29.3733 271.37 28.44C272.063 27.48 273.023 26.7333 274.25 26.2C275.476 25.6667 276.903 25.4 278.53 25.4C280.236 25.4 281.73 25.6933 283.01 26.28C284.29 26.84 285.316 27.6533 286.09 28.72C286.863 29.76 287.303 31.0133 287.41 32.48H283.53C283.396 31.2267 282.89 30.24 282.01 29.52C281.13 28.8 279.983 28.44 278.57 28.44C277.29 28.44 276.25 28.7067 275.45 29.24C274.676 29.7467 274.29 30.4533 274.29 31.36C274.29 32.2133 274.57 32.8667 275.13 33.32C275.716 33.7467 276.65 34.0933 277.93 34.36L281.53 35.04C283.636 35.4133 285.196 36.0667 286.21 37C287.223 37.9333 287.73 39.16 287.73 40.68Z" fill="#0D1117"/>
+<defs>
+<pattern id="pattern0_8087_13130" patternContentUnits="objectBoundingBox" width="1" height="1">
+<use xlink:href="#image0_8087_13130"/>
+</pattern>
+<linearGradient id="paint0_linear_8087_13130" x1="31.4868" y1="58.5174" x2="38.8204" y2="51.1838" gradientUnits="userSpaceOnUse">
+<stop stop-color="#1A237E" stop-opacity="0.4"/>
+<stop offset="1" stop-color="#1A237E" stop-opacity="0"/>
+</linearGradient>
+<clipPath id="clip0_8087_13130">
+<rect width="64" height="64" fill="white"/>
+</clipPath>
+<image id="image0_8087_13130" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABkCAYAAABO6zhfAAAACXBIWXMAAAx0AAAMdAH/P3aRAAAA"/>
+</defs>
+</svg>
diff --git a/src/assets/home/hero-background.webp b/src/assets/home/hero-background.webp
new file mode 100644
index 00000000..cd0b71b3
Binary files /dev/null and b/src/assets/home/hero-background.webp differ
diff --git a/src/assets/home/resource-blog.png b/src/assets/home/resource-blog.png
new file mode 100644
index 00000000..6f71b23f
Binary files /dev/null and b/src/assets/home/resource-blog.png differ
diff --git a/src/assets/home/resource-community.png b/src/assets/home/resource-community.png
new file mode 100644
index 00000000..45aaed48
Binary files /dev/null and b/src/assets/home/resource-community.png differ
diff --git a/src/assets/home/resource-docs.png b/src/assets/home/resource-docs.png
new file mode 100644
index 00000000..f4c13f8b
Binary files /dev/null and b/src/assets/home/resource-docs.png differ
diff --git a/src/assets/home/resource-faq.png b/src/assets/home/resource-faq.png
new file mode 100644
index 00000000..f65a1345
Binary files /dev/null and b/src/assets/home/resource-faq.png differ
diff --git a/src/assets/home/security-versions.webp b/src/assets/home/security-versions.webp
new file mode 100644
index 00000000..974149a8
Binary files /dev/null and b/src/assets/home/security-versions.webp differ
diff --git a/src/assets/home/security-workflow.webp b/src/assets/home/security-workflow.webp
new file mode 100644
index 00000000..3bac95b1
Binary files /dev/null and b/src/assets/home/security-workflow.webp differ
diff --git a/src/assets/home/terminal-demo.webp b/src/assets/home/terminal-demo.webp
new file mode 100644
index 00000000..7bb88534
Binary files /dev/null and b/src/assets/home/terminal-demo.webp differ
diff --git a/src/assets/jobs/covers/engineer-cover.png b/src/assets/jobs/covers/engineer-cover.png
deleted file mode 100644
index a63cf6c5..00000000
Binary files a/src/assets/jobs/covers/engineer-cover.png and /dev/null differ
diff --git a/src/assets/jobs/covers/marketing-cover.png b/src/assets/jobs/covers/marketing-cover.png
deleted file mode 100644
index 6bd8e55c..00000000
Binary files a/src/assets/jobs/covers/marketing-cover.png and /dev/null differ
diff --git a/src/assets/product/code-push-ebook-og.jpg b/src/assets/product/code-push-ebook-og.jpg
new file mode 100644
index 00000000..21db9b5a
Binary files /dev/null and b/src/assets/product/code-push-ebook-og.jpg differ
diff --git a/src/assets/product/code-push-ebook.png b/src/assets/product/code-push-ebook.png
new file mode 100644
index 00000000..8099d1a5
Binary files /dev/null and b/src/assets/product/code-push-ebook.png differ
diff --git a/src/assets/product/productivity-1.webp b/src/assets/product/productivity-1.webp
new file mode 100644
index 00000000..1385dd1e
Binary files /dev/null and b/src/assets/product/productivity-1.webp differ
diff --git a/src/assets/product/productivity-2.webp b/src/assets/product/productivity-2.webp
new file mode 100644
index 00000000..489c788f
Binary files /dev/null and b/src/assets/product/productivity-2.webp differ
diff --git a/src/assets/product/productivity-3.webp b/src/assets/product/productivity-3.webp
new file mode 100644
index 00000000..269954dd
Binary files /dev/null and b/src/assets/product/productivity-3.webp differ
diff --git a/src/assets/product/productivity-4.webp b/src/assets/product/productivity-4.webp
new file mode 100644
index 00000000..9207e904
Binary files /dev/null and b/src/assets/product/productivity-4.webp differ
diff --git a/src/assets/product/pushpress.svg b/src/assets/product/pushpress.svg
new file mode 100644
index 00000000..9492babd
--- /dev/null
+++ b/src/assets/product/pushpress.svg
@@ -0,0 +1,20 @@
+<svg width="150" height="48" viewBox="0 0 150 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_8135_16161)">
+<path d="M38.5712 26.9674V31.5836H34.6287V15.9727H40.8509C43.0278 15.9727 44.6347 16.4696 45.671 17.4635C46.7092 18.4574 47.2255 19.7826 47.2255 21.4371C47.2255 23.0916 46.7154 24.5026 45.6911 25.4965C44.6668 26.4904 43.0762 26.9814 40.9151 26.9674H38.5693H38.5712ZM38.5712 19.3256V23.5926H40.8046C41.5499 23.5926 42.1381 23.4109 42.568 23.0477C42.9979 22.6845 43.2148 22.1476 43.2148 21.4371C43.2148 20.7705 43.0059 20.2516 42.5902 19.8804C42.1745 19.5092 41.5718 19.3256 40.7827 19.3256H38.5712Z" fill="#080808"/>
+<path d="M56.1647 29.448C55.8434 30.1744 55.3694 30.7512 54.7408 31.1783C54.1121 31.6054 53.3249 31.821 52.375 31.821C50.9591 31.821 49.9024 31.3998 49.2096 30.5576C48.5146 29.7154 48.1693 28.5259 48.1693 26.9872V18.9522H52.158V25.8097C52.158 26.58 52.2744 27.2007 52.5074 27.6697C52.7425 28.1407 53.2163 28.3762 53.9313 28.3762C54.6463 28.3762 55.1284 28.1108 55.4216 27.5819C55.7129 27.053 55.8595 26.3665 55.8595 25.5243V18.9502H59.9124V31.5775H56.5381L56.1647 29.444V29.448Z" fill="#080808"/>
+<path d="M62.7905 30.7334C61.7521 29.9351 61.1336 28.8095 60.9287 27.3585H65.048C65.1804 27.8655 65.4375 28.2507 65.8251 28.5121C66.2127 28.7735 66.7349 28.9033 67.3916 28.9033C68.0486 28.9033 68.4763 28.8055 68.7615 28.6099C69.0445 28.4143 69.1892 28.1429 69.1892 27.7936C69.1892 27.6479 69.1571 27.5222 69.0908 27.4124C69.0244 27.3047 68.918 27.2128 68.7735 27.141C68.5103 26.9953 68.1529 26.8875 67.699 26.8137C67.245 26.7418 66.7571 26.676 66.2309 26.6181C65.6905 26.5463 65.1384 26.4465 64.5758 26.3247C64.0135 26.203 63.4975 26.0094 63.0315 25.7479C62.5495 25.5005 62.1659 25.1472 61.8807 24.6802C61.5956 24.2152 61.453 23.6065 61.453 22.8521C61.453 21.6187 61.927 20.6128 62.8769 19.8364C63.8247 19.0601 65.1986 18.6709 66.9959 18.6709C68.9081 18.6709 70.3258 19.0581 71.2458 19.8364C72.1657 20.6128 72.7219 21.6327 72.9107 22.896H68.9883C68.9 22.4469 68.6852 22.1096 68.3418 21.8841C67.9983 21.6586 67.5342 21.5468 66.9518 21.5468C66.3392 21.5468 65.9075 21.6486 65.6584 21.8522C65.4094 22.0558 65.285 22.3092 65.285 22.6146C65.285 23.0078 65.5439 23.2672 66.0621 23.3989C66.5802 23.5306 67.3073 23.6524 68.2412 23.7681C68.7976 23.84 69.354 23.9418 69.9182 24.0735C70.4807 24.2052 71.0029 24.4008 71.4847 24.6602C71.9528 24.9217 72.3324 25.2809 72.6234 25.738C72.9148 26.195 73.0613 26.7937 73.0613 27.5342C73.0613 27.9553 73.007 28.3544 72.8968 28.7316C72.7882 29.1088 72.6296 29.4641 72.4268 29.7994C71.9889 30.452 71.3341 30.9709 70.4666 31.3561C69.5969 31.7393 68.5063 31.9329 67.191 31.9329C65.293 31.9329 63.8247 31.5337 62.7865 30.7354L62.7905 30.7334Z" fill="#080808"/>
+<path d="M78.2633 31.5819H74.2986V14.8174H78.2633V20.8925C78.6126 20.21 79.1027 19.6731 79.7313 19.2819C80.36 18.8907 81.133 18.6952 82.053 18.6952C83.4831 18.6952 84.5354 19.1163 85.2082 19.9565C85.8788 20.7987 86.2164 21.9822 86.2164 23.505V31.5819H82.2076V24.6805C82.2076 23.9121 82.0752 23.2895 81.8141 22.8204C81.5509 22.3474 81.0549 22.1139 80.3239 22.1139C79.5928 22.1139 79.0666 22.3794 78.7472 22.9083C78.4259 23.4391 78.2651 24.1317 78.2651 24.9879V31.5859L78.2633 31.5819Z" fill="#080808"/>
+<path d="M91.9822 26.9674V31.5836H88.0379V15.9727H94.2598C96.4348 15.9727 98.0436 16.4696 99.0799 17.4635C100.118 18.4574 100.634 19.7826 100.634 21.4371C100.634 23.0916 100.124 24.5026 99.1 25.4965C98.0778 26.4904 96.4851 26.9814 94.3242 26.9674H91.9804H91.9822ZM91.9822 19.3256V23.5926H94.2156C94.9609 23.5926 95.5491 23.4109 95.979 23.0477C96.4089 22.6845 96.6258 22.1476 96.6258 21.4371C96.6258 20.7705 96.4169 20.2516 96.0012 19.8804C95.5855 19.5092 94.9828 19.3256 94.1937 19.3256H91.9822Z" fill="#080808"/>
+<path d="M101.616 31.5822V18.9549H104.816L105.364 21.5455C105.569 20.5595 105.999 19.851 106.658 19.4219C107.314 18.9948 108.212 18.7793 109.353 18.7793H110.076V22.9385H108.586C108.206 22.9385 107.867 22.9644 107.567 23.0143C107.268 23.0662 107.009 23.1421 106.79 23.2419C106.38 23.4295 106.095 23.7468 105.937 24.1879C105.776 24.6309 105.696 25.2296 105.696 25.9841V31.5802H101.619L101.616 31.5822Z" fill="#080808"/>
+<path d="M121.425 30.734C120.403 31.5183 118.965 31.9095 117.109 31.9095C114.904 31.9095 113.275 31.3407 112.223 30.1991C111.171 29.0595 110.646 27.5188 110.646 25.5729V25.2017C110.646 24.5191 110.713 23.8884 110.843 23.3077C110.976 22.7269 111.179 22.196 111.456 21.7171C111.996 20.7451 112.755 19.9967 113.735 19.4738C114.713 18.9509 115.86 18.6895 117.176 18.6895C117.921 18.6895 118.599 18.7613 119.214 18.907C119.827 19.0527 120.367 19.2702 120.835 19.5596C121.769 20.1404 122.46 20.9068 122.905 21.8568C123.35 22.8087 123.574 23.8565 123.574 25.0021V26.4171H114.613C114.715 27.2015 114.983 27.7882 115.412 28.1814C115.842 28.5725 116.447 28.7681 117.22 28.7681C117.774 28.7681 118.218 28.6604 118.545 28.4408C118.875 28.2233 119.112 27.9339 119.256 27.5687H123.486C123.137 28.8899 122.448 29.9416 121.428 30.726L121.425 30.734ZM115.466 22.2559C115.029 22.6271 114.743 23.1879 114.613 23.9423H119.63C119.542 23.2299 119.305 22.679 118.919 22.2878C118.531 21.8967 117.967 21.7011 117.222 21.7011C116.477 21.7011 115.908 21.8867 115.47 22.2559H115.466Z" fill="#080808"/>
+<path d="M125.964 30.7334C124.926 29.9351 124.307 28.8095 124.103 27.3585H128.222C128.354 27.8655 128.611 28.2507 128.999 28.5121C129.387 28.7735 129.909 28.9033 130.565 28.9033C131.222 28.9033 131.65 28.8055 131.935 28.6099C132.22 28.4143 132.363 28.1429 132.363 27.7936C132.363 27.6479 132.331 27.5222 132.265 27.4124C132.198 27.3047 132.092 27.2128 131.947 27.141C131.684 26.9953 131.327 26.8875 130.875 26.8137C130.421 26.7418 129.931 26.676 129.407 26.6181C128.867 26.5463 128.314 26.4465 127.752 26.3247C127.19 26.203 126.673 26.0094 126.207 25.7479C125.725 25.5005 125.342 25.1472 125.059 24.6802C124.773 24.2152 124.631 23.6065 124.631 22.8521C124.631 21.6187 125.105 20.6128 126.055 19.8364C127.005 19.0601 128.376 18.6709 130.174 18.6709C132.086 18.6709 133.504 19.0581 134.424 19.8364C135.344 20.6128 135.9 21.6327 136.089 22.896H132.166C132.08 22.4469 131.863 22.1096 131.52 21.8841C131.176 21.6586 130.712 21.5468 130.128 21.5468C129.543 21.5468 129.083 21.6486 128.834 21.8522C128.585 22.0558 128.461 22.3092 128.461 22.6146C128.461 23.0078 128.72 23.2672 129.238 23.3989C129.756 23.5306 130.483 23.6524 131.417 23.7681C131.973 23.84 132.532 23.9418 133.094 24.0735C133.656 24.2052 134.179 24.4008 134.661 24.6602C135.129 24.9217 135.508 25.2809 135.799 25.738C136.093 26.195 136.237 26.7937 136.237 27.5342C136.237 27.9553 136.183 28.3544 136.073 28.7316C135.964 29.1088 135.805 29.4641 135.603 29.7994C135.165 30.452 134.51 30.9709 133.642 31.3561C132.773 31.7393 131.682 31.9329 130.369 31.9329C128.471 31.9329 127.003 31.5337 125.964 30.7354V30.7334Z" fill="#080808"/>
+<path d="M138.591 30.7334C137.553 29.9351 136.934 28.8095 136.729 27.3585H140.849C140.981 27.8655 141.238 28.2507 141.626 28.5121C142.013 28.7735 142.535 28.9033 143.192 28.9033C143.849 28.9033 144.277 28.8055 144.562 28.6099C144.847 28.4143 144.99 28.1429 144.99 27.7936C144.99 27.6479 144.958 27.5222 144.891 27.4124C144.825 27.3047 144.719 27.2128 144.574 27.141C144.311 26.9953 143.954 26.8875 143.5 26.8137C143.046 26.7418 142.558 26.676 142.032 26.6181C141.491 26.5463 140.939 26.4465 140.376 26.3247C139.814 26.203 139.298 26.0094 138.832 25.7479C138.35 25.5005 137.967 25.1472 137.683 24.6802C137.398 24.2152 137.255 23.6065 137.255 22.8521C137.255 21.6187 137.73 20.6128 138.679 19.8364C139.63 19.0601 141.001 18.6709 142.799 18.6709C144.711 18.6709 146.129 19.0581 147.049 19.8364C147.968 20.6128 148.525 21.6327 148.714 22.896H144.791C144.703 22.4469 144.488 22.1096 144.144 21.8841C143.801 21.6586 143.337 21.5468 142.752 21.5468C142.168 21.5468 141.708 21.6486 141.459 21.8522C141.21 22.0558 141.086 22.3092 141.086 22.6146C141.086 23.0078 141.345 23.2672 141.863 23.3989C142.381 23.5306 143.108 23.6524 144.042 23.7681C144.598 23.84 145.155 23.9418 145.719 24.0735C146.281 24.2052 146.804 24.4008 147.286 24.6602C147.753 24.9217 148.133 25.2809 148.424 25.738C148.718 26.195 148.862 26.7937 148.862 27.5342C148.862 27.9553 148.808 28.3544 148.697 28.7316C148.589 29.1088 148.43 29.4641 148.227 29.7994C147.79 30.452 147.135 30.9709 146.267 31.3561C145.398 31.7393 144.307 31.9329 142.992 31.9329C141.094 31.9329 139.626 31.5337 138.587 30.7354L138.591 30.7334Z" fill="#080808"/>
+<path d="M9.90136 29.7002H0.461929C0.206864 29.7002 0 29.9058 0 30.1592V39.5393C0 39.9486 0.49808 40.1542 0.789299 39.8646L10.2287 30.4845C10.52 30.1952 10.3131 29.7002 9.90136 29.7002Z" fill="#0063FF"/>
+<path d="M5.58521 8H15.2878C20.5517 8 24.8256 12.247 24.8256 17.4799C24.8256 22.7109 20.5517 26.9599 15.2858 26.9599H3.21932C2.96426 26.9599 2.7594 26.7543 2.7594 26.5029V10.8081C2.7574 9.25934 4.0247 8 5.58521 8Z" fill="#0063FF"/>
+</g>
+<defs>
+<clipPath id="clip0_8135_16161">
+<rect width="149" height="32" fill="white" transform="translate(0 8)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/resources/discord.png b/src/assets/resources/discord.png
deleted file mode 100644
index 06cea37a..00000000
Binary files a/src/assets/resources/discord.png and /dev/null differ
diff --git a/src/assets/resources/shorebird.png b/src/assets/resources/shorebird.png
deleted file mode 100644
index 918ad934..00000000
Binary files a/src/assets/resources/shorebird.png and /dev/null differ
diff --git a/src/assets/success-stories/covers/scapia-cover.png b/src/assets/success-stories/covers/scapia-cover.png
new file mode 100644
index 00000000..0f34604b
Binary files /dev/null and b/src/assets/success-stories/covers/scapia-cover.png differ
diff --git a/src/assets/success-stories/covers/vetc-cover.png b/src/assets/success-stories/covers/vetc-cover.png
new file mode 100644
index 00000000..93455484
Binary files /dev/null and b/src/assets/success-stories/covers/vetc-cover.png differ
diff --git a/src/assets/team/abhishek-doshi.jpg b/src/assets/team/abhishek-doshi.jpg
new file mode 100644
index 00000000..8d49cbce
Binary files /dev/null and b/src/assets/team/abhishek-doshi.jpg differ
diff --git a/src/assets/team/bryan-headshot.png b/src/assets/team/bryan-headshot.png
deleted file mode 100644
index 49d3d100..00000000
Binary files a/src/assets/team/bryan-headshot.png and /dev/null differ
diff --git a/src/assets/team/dawn-parzych.avif b/src/assets/team/dawn-parzych.avif
new file mode 100644
index 00000000..e9982277
Binary files /dev/null and b/src/assets/team/dawn-parzych.avif differ
diff --git a/src/assets/team/eric-headshot.jpeg b/src/assets/team/eric-headshot.jpeg
deleted file mode 100644
index 6e1479fa..00000000
Binary files a/src/assets/team/eric-headshot.jpeg and /dev/null differ
diff --git a/src/assets/team/eric-seidel.jpg b/src/assets/team/eric-seidel.jpg
new file mode 100644
index 00000000..813cab8c
Binary files /dev/null and b/src/assets/team/eric-seidel.jpg differ
diff --git a/src/assets/team/felix-headshot.jpeg b/src/assets/team/felix-headshot.jpeg
deleted file mode 100644
index 4321f4e6..00000000
Binary files a/src/assets/team/felix-headshot.jpeg and /dev/null differ
diff --git a/src/assets/team/josh-owens.jpg b/src/assets/team/josh-owens.jpg
new file mode 100644
index 00000000..2b45df5c
Binary files /dev/null and b/src/assets/team/josh-owens.jpg differ
diff --git a/src/assets/team/mac-carrithers.avif b/src/assets/team/mac-carrithers.avif
new file mode 100644
index 00000000..cc83f8f3
Binary files /dev/null and b/src/assets/team/mac-carrithers.avif differ
diff --git a/src/assets/team/nick-weatherley.jpg b/src/assets/team/nick-weatherley.jpg
new file mode 100644
index 00000000..dcb94ed0
Binary files /dev/null and b/src/assets/team/nick-weatherley.jpg differ
diff --git a/src/assets/team/tom-headshot.jpg b/src/assets/team/tom-headshot.jpg
deleted file mode 100644
index 83172b2a..00000000
Binary files a/src/assets/team/tom-headshot.jpg and /dev/null differ
diff --git a/src/assets/team/wesley-peck.png b/src/assets/team/wesley-peck.png
new file mode 100644
index 00000000..7aa780f4
Binary files /dev/null and b/src/assets/team/wesley-peck.png differ
diff --git a/src/assets/testimonials/david-paul.jpg b/src/assets/testimonials/david-paul.jpg
deleted file mode 100644
index 56d7db5d..00000000
Binary files a/src/assets/testimonials/david-paul.jpg and /dev/null differ
diff --git a/src/assets/testimonials/david-sylvester-paul.webp b/src/assets/testimonials/david-sylvester-paul.webp
new file mode 100644
index 00000000..5e45e907
Binary files /dev/null and b/src/assets/testimonials/david-sylvester-paul.webp differ
diff --git a/src/assets/testimonials/esra-kadah.png b/src/assets/testimonials/esra-kadah.png
deleted file mode 100644
index dde71897..00000000
Binary files a/src/assets/testimonials/esra-kadah.png and /dev/null differ
diff --git a/src/assets/testimonials/esra-kadah.webp b/src/assets/testimonials/esra-kadah.webp
new file mode 100644
index 00000000..e2f60cc9
Binary files /dev/null and b/src/assets/testimonials/esra-kadah.webp differ
diff --git a/src/assets/testimonials/jason-rai.png b/src/assets/testimonials/jason-rai.png
deleted file mode 100644
index 479e2c2f..00000000
Binary files a/src/assets/testimonials/jason-rai.png and /dev/null differ
diff --git a/src/assets/testimonials/jason-rai.webp b/src/assets/testimonials/jason-rai.webp
new file mode 100644
index 00000000..aa028e27
Binary files /dev/null and b/src/assets/testimonials/jason-rai.webp differ
diff --git a/src/assets/testimonials/logos/chai.svg b/src/assets/testimonials/logos/chai.svg
new file mode 100644
index 00000000..0eaa4547
--- /dev/null
+++ b/src/assets/testimonials/logos/chai.svg
@@ -0,0 +1,15 @@
+<svg width="94" height="48" viewBox="0 0 94 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_8273_1408)">
+<path d="M31.625 10.0581C34.0258 10.0581 35.9725 12.0046 35.9725 14.4058C35.9725 16.807 34.0258 18.7535 31.625 18.7535H18.4996C15.681 18.7535 14.1853 19.9094 14.1853 23.0675C14.1853 25.4501 12.2538 27.3816 9.87151 27.3816H5.46328C3.06243 27.3816 1.11572 25.4351 1.11572 23.0338C1.11572 20.6327 3.06243 18.6862 5.46328 18.6862H9.87151C12.803 18.6862 14.1853 17.5127 14.1853 14.3721C14.1853 11.9896 16.1168 10.0581 18.4996 10.0581H31.625Z" fill="#0D1117"/>
+<path d="M22.8275 27.2437C20.4266 27.2437 18.48 29.1904 18.48 31.5919C18.48 33.9934 20.4266 35.9401 22.8275 35.9401H31.6249C34.0258 35.9401 35.9724 33.9934 35.9724 31.5919C35.9724 29.1904 34.0258 27.2437 31.6249 27.2437H22.8275Z" fill="#0D1117"/>
+<path d="M53.2469 29.8269C49.5023 29.8269 46.4531 26.796 46.4531 23.065C46.4531 19.3339 49.5023 16.3032 53.2469 16.3032C55.7365 16.3032 58.0244 17.6548 59.2177 19.8336L59.3577 20.0916L57.5265 21.0869L57.3865 20.8288C56.5595 19.3176 54.9752 18.3797 53.2511 18.3797C50.6545 18.3797 48.5435 20.4807 48.5435 23.065C48.5435 25.6494 50.6545 27.7504 53.2511 27.7504C54.9752 27.7504 56.5595 26.8124 57.3865 25.3012L57.5265 25.0432L59.3618 26.0384L59.2219 26.2964C58.0285 28.4753 55.7406 29.8269 53.2511 29.8269H53.2469Z" fill="#0D1117"/>
+<path d="M70.8096 29.6218V23.5808H63.415V29.6218H61.3286V16.5078H63.415V21.6232H70.8096V16.5078H72.8958V29.6218H70.8096Z" fill="#0D1117"/>
+<path d="M90.1973 29.6218V27.5454V18.5884V16.5078H92.2836V18.5884V27.5454V29.6218H90.1973Z" fill="#0D1117"/>
+<path d="M86.2117 29.6218H88.2981L83.7181 16.5078H81.6277L84.2325 23.9618H79.023L81.6277 16.5078H79.5414L74.9614 29.6218H77.0478L78.3398 25.9235H84.9197L86.2117 29.6218Z" fill="#0D1117"/>
+</g>
+<defs>
+<clipPath id="clip0_8273_1408">
+<rect width="92" height="26" fill="white" transform="translate(1 10)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/testimonials/logos/flame.svg b/src/assets/testimonials/logos/flame.svg
new file mode 100644
index 00000000..bdf88ed4
--- /dev/null
+++ b/src/assets/testimonials/logos/flame.svg
@@ -0,0 +1,18 @@
+<svg width="120" height="48" viewBox="0 0 120 48" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g clip-path="url(#clip0_8149_4066)">
+<rect x="-1" y="4" width="36.129" height="40" fill="url(#pattern0_8149_4066)"/>
+<rect x="35.129" y="10.4512" width="85.1613" height="27.0968" fill="url(#pattern1_8149_4066)"/>
+</g>
+<defs>
+<pattern id="pattern0_8149_4066" patternContentUnits="objectBoundingBox" width="1" height="1">
+<use xlink:href="#image0_8149_4066" transform="matrix(0.00550281 0 0 0.00497028 -0.428571 -0.102914)"/>
+</pattern>
+<pattern id="pattern1_8149_4066" patternContentUnits="objectBoundingBox" width="1" height="1">
+<use xlink:href="#image0_8149_4066" transform="matrix(0.00372465 0 0 0.011706 -0.126799 -2.50803)"/>
+</pattern>
+<clipPath id="clip0_8149_4066">
+<rect width="120" height="48" fill="white"/>
+</clipPath>
+<image id="image0_8149_4066" width="331" height="314" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/>
+</defs>
+</svg>
diff --git a/src/assets/testimonials/logos/pushpress.svg b/src/assets/testimonials/logos/pushpress.svg
new file mode 100644
index 00000000..9492babd
--- /dev/null
+++ b/src/assets/testimonials/logos/pushpress.svg
@@ -0,0 +1,20 @@
+<svg width="150" height="48" viewBox="0 0 150 48" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_8135_16161)">
+<path d="M38.5712 26.9674V31.5836H34.6287V15.9727H40.8509C43.0278 15.9727 44.6347 16.4696 45.671 17.4635C46.7092 18.4574 47.2255 19.7826 47.2255 21.4371C47.2255 23.0916 46.7154 24.5026 45.6911 25.4965C44.6668 26.4904 43.0762 26.9814 40.9151 26.9674H38.5693H38.5712ZM38.5712 19.3256V23.5926H40.8046C41.5499 23.5926 42.1381 23.4109 42.568 23.0477C42.9979 22.6845 43.2148 22.1476 43.2148 21.4371C43.2148 20.7705 43.0059 20.2516 42.5902 19.8804C42.1745 19.5092 41.5718 19.3256 40.7827 19.3256H38.5712Z" fill="#080808"/>
+<path d="M56.1647 29.448C55.8434 30.1744 55.3694 30.7512 54.7408 31.1783C54.1121 31.6054 53.3249 31.821 52.375 31.821C50.9591 31.821 49.9024 31.3998 49.2096 30.5576C48.5146 29.7154 48.1693 28.5259 48.1693 26.9872V18.9522H52.158V25.8097C52.158 26.58 52.2744 27.2007 52.5074 27.6697C52.7425 28.1407 53.2163 28.3762 53.9313 28.3762C54.6463 28.3762 55.1284 28.1108 55.4216 27.5819C55.7129 27.053 55.8595 26.3665 55.8595 25.5243V18.9502H59.9124V31.5775H56.5381L56.1647 29.444V29.448Z" fill="#080808"/>
+<path d="M62.7905 30.7334C61.7521 29.9351 61.1336 28.8095 60.9287 27.3585H65.048C65.1804 27.8655 65.4375 28.2507 65.8251 28.5121C66.2127 28.7735 66.7349 28.9033 67.3916 28.9033C68.0486 28.9033 68.4763 28.8055 68.7615 28.6099C69.0445 28.4143 69.1892 28.1429 69.1892 27.7936C69.1892 27.6479 69.1571 27.5222 69.0908 27.4124C69.0244 27.3047 68.918 27.2128 68.7735 27.141C68.5103 26.9953 68.1529 26.8875 67.699 26.8137C67.245 26.7418 66.7571 26.676 66.2309 26.6181C65.6905 26.5463 65.1384 26.4465 64.5758 26.3247C64.0135 26.203 63.4975 26.0094 63.0315 25.7479C62.5495 25.5005 62.1659 25.1472 61.8807 24.6802C61.5956 24.2152 61.453 23.6065 61.453 22.8521C61.453 21.6187 61.927 20.6128 62.8769 19.8364C63.8247 19.0601 65.1986 18.6709 66.9959 18.6709C68.9081 18.6709 70.3258 19.0581 71.2458 19.8364C72.1657 20.6128 72.7219 21.6327 72.9107 22.896H68.9883C68.9 22.4469 68.6852 22.1096 68.3418 21.8841C67.9983 21.6586 67.5342 21.5468 66.9518 21.5468C66.3392 21.5468 65.9075 21.6486 65.6584 21.8522C65.4094 22.0558 65.285 22.3092 65.285 22.6146C65.285 23.0078 65.5439 23.2672 66.0621 23.3989C66.5802 23.5306 67.3073 23.6524 68.2412 23.7681C68.7976 23.84 69.354 23.9418 69.9182 24.0735C70.4807 24.2052 71.0029 24.4008 71.4847 24.6602C71.9528 24.9217 72.3324 25.2809 72.6234 25.738C72.9148 26.195 73.0613 26.7937 73.0613 27.5342C73.0613 27.9553 73.007 28.3544 72.8968 28.7316C72.7882 29.1088 72.6296 29.4641 72.4268 29.7994C71.9889 30.452 71.3341 30.9709 70.4666 31.3561C69.5969 31.7393 68.5063 31.9329 67.191 31.9329C65.293 31.9329 63.8247 31.5337 62.7865 30.7354L62.7905 30.7334Z" fill="#080808"/>
+<path d="M78.2633 31.5819H74.2986V14.8174H78.2633V20.8925C78.6126 20.21 79.1027 19.6731 79.7313 19.2819C80.36 18.8907 81.133 18.6952 82.053 18.6952C83.4831 18.6952 84.5354 19.1163 85.2082 19.9565C85.8788 20.7987 86.2164 21.9822 86.2164 23.505V31.5819H82.2076V24.6805C82.2076 23.9121 82.0752 23.2895 81.8141 22.8204C81.5509 22.3474 81.0549 22.1139 80.3239 22.1139C79.5928 22.1139 79.0666 22.3794 78.7472 22.9083C78.4259 23.4391 78.2651 24.1317 78.2651 24.9879V31.5859L78.2633 31.5819Z" fill="#080808"/>
+<path d="M91.9822 26.9674V31.5836H88.0379V15.9727H94.2598C96.4348 15.9727 98.0436 16.4696 99.0799 17.4635C100.118 18.4574 100.634 19.7826 100.634 21.4371C100.634 23.0916 100.124 24.5026 99.1 25.4965C98.0778 26.4904 96.4851 26.9814 94.3242 26.9674H91.9804H91.9822ZM91.9822 19.3256V23.5926H94.2156C94.9609 23.5926 95.5491 23.4109 95.979 23.0477C96.4089 22.6845 96.6258 22.1476 96.6258 21.4371C96.6258 20.7705 96.4169 20.2516 96.0012 19.8804C95.5855 19.5092 94.9828 19.3256 94.1937 19.3256H91.9822Z" fill="#080808"/>
+<path d="M101.616 31.5822V18.9549H104.816L105.364 21.5455C105.569 20.5595 105.999 19.851 106.658 19.4219C107.314 18.9948 108.212 18.7793 109.353 18.7793H110.076V22.9385H108.586C108.206 22.9385 107.867 22.9644 107.567 23.0143C107.268 23.0662 107.009 23.1421 106.79 23.2419C106.38 23.4295 106.095 23.7468 105.937 24.1879C105.776 24.6309 105.696 25.2296 105.696 25.9841V31.5802H101.619L101.616 31.5822Z" fill="#080808"/>
+<path d="M121.425 30.734C120.403 31.5183 118.965 31.9095 117.109 31.9095C114.904 31.9095 113.275 31.3407 112.223 30.1991C111.171 29.0595 110.646 27.5188 110.646 25.5729V25.2017C110.646 24.5191 110.713 23.8884 110.843 23.3077C110.976 22.7269 111.179 22.196 111.456 21.7171C111.996 20.7451 112.755 19.9967 113.735 19.4738C114.713 18.9509 115.86 18.6895 117.176 18.6895C117.921 18.6895 118.599 18.7613 119.214 18.907C119.827 19.0527 120.367 19.2702 120.835 19.5596C121.769 20.1404 122.46 20.9068 122.905 21.8568C123.35 22.8087 123.574 23.8565 123.574 25.0021V26.4171H114.613C114.715 27.2015 114.983 27.7882 115.412 28.1814C115.842 28.5725 116.447 28.7681 117.22 28.7681C117.774 28.7681 118.218 28.6604 118.545 28.4408C118.875 28.2233 119.112 27.9339 119.256 27.5687H123.486C123.137 28.8899 122.448 29.9416 121.428 30.726L121.425 30.734ZM115.466 22.2559C115.029 22.6271 114.743 23.1879 114.613 23.9423H119.63C119.542 23.2299 119.305 22.679 118.919 22.2878C118.531 21.8967 117.967 21.7011 117.222 21.7011C116.477 21.7011 115.908 21.8867 115.47 22.2559H115.466Z" fill="#080808"/>
+<path d="M125.964 30.7334C124.926 29.9351 124.307 28.8095 124.103 27.3585H128.222C128.354 27.8655 128.611 28.2507 128.999 28.5121C129.387 28.7735 129.909 28.9033 130.565 28.9033C131.222 28.9033 131.65 28.8055 131.935 28.6099C132.22 28.4143 132.363 28.1429 132.363 27.7936C132.363 27.6479 132.331 27.5222 132.265 27.4124C132.198 27.3047 132.092 27.2128 131.947 27.141C131.684 26.9953 131.327 26.8875 130.875 26.8137C130.421 26.7418 129.931 26.676 129.407 26.6181C128.867 26.5463 128.314 26.4465 127.752 26.3247C127.19 26.203 126.673 26.0094 126.207 25.7479C125.725 25.5005 125.342 25.1472 125.059 24.6802C124.773 24.2152 124.631 23.6065 124.631 22.8521C124.631 21.6187 125.105 20.6128 126.055 19.8364C127.005 19.0601 128.376 18.6709 130.174 18.6709C132.086 18.6709 133.504 19.0581 134.424 19.8364C135.344 20.6128 135.9 21.6327 136.089 22.896H132.166C132.08 22.4469 131.863 22.1096 131.52 21.8841C131.176 21.6586 130.712 21.5468 130.128 21.5468C129.543 21.5468 129.083 21.6486 128.834 21.8522C128.585 22.0558 128.461 22.3092 128.461 22.6146C128.461 23.0078 128.72 23.2672 129.238 23.3989C129.756 23.5306 130.483 23.6524 131.417 23.7681C131.973 23.84 132.532 23.9418 133.094 24.0735C133.656 24.2052 134.179 24.4008 134.661 24.6602C135.129 24.9217 135.508 25.2809 135.799 25.738C136.093 26.195 136.237 26.7937 136.237 27.5342C136.237 27.9553 136.183 28.3544 136.073 28.7316C135.964 29.1088 135.805 29.4641 135.603 29.7994C135.165 30.452 134.51 30.9709 133.642 31.3561C132.773 31.7393 131.682 31.9329 130.369 31.9329C128.471 31.9329 127.003 31.5337 125.964 30.7354V30.7334Z" fill="#080808"/>
+<path d="M138.591 30.7334C137.553 29.9351 136.934 28.8095 136.729 27.3585H140.849C140.981 27.8655 141.238 28.2507 141.626 28.5121C142.013 28.7735 142.535 28.9033 143.192 28.9033C143.849 28.9033 144.277 28.8055 144.562 28.6099C144.847 28.4143 144.99 28.1429 144.99 27.7936C144.99 27.6479 144.958 27.5222 144.891 27.4124C144.825 27.3047 144.719 27.2128 144.574 27.141C144.311 26.9953 143.954 26.8875 143.5 26.8137C143.046 26.7418 142.558 26.676 142.032 26.6181C141.491 26.5463 140.939 26.4465 140.376 26.3247C139.814 26.203 139.298 26.0094 138.832 25.7479C138.35 25.5005 137.967 25.1472 137.683 24.6802C137.398 24.2152 137.255 23.6065 137.255 22.8521C137.255 21.6187 137.73 20.6128 138.679 19.8364C139.63 19.0601 141.001 18.6709 142.799 18.6709C144.711 18.6709 146.129 19.0581 147.049 19.8364C147.968 20.6128 148.525 21.6327 148.714 22.896H144.791C144.703 22.4469 144.488 22.1096 144.144 21.8841C143.801 21.6586 143.337 21.5468 142.752 21.5468C142.168 21.5468 141.708 21.6486 141.459 21.8522C141.21 22.0558 141.086 22.3092 141.086 22.6146C141.086 23.0078 141.345 23.2672 141.863 23.3989C142.381 23.5306 143.108 23.6524 144.042 23.7681C144.598 23.84 145.155 23.9418 145.719 24.0735C146.281 24.2052 146.804 24.4008 147.286 24.6602C147.753 24.9217 148.133 25.2809 148.424 25.738C148.718 26.195 148.862 26.7937 148.862 27.5342C148.862 27.9553 148.808 28.3544 148.697 28.7316C148.589 29.1088 148.43 29.4641 148.227 29.7994C147.79 30.452 147.135 30.9709 146.267 31.3561C145.398 31.7393 144.307 31.9329 142.992 31.9329C141.094 31.9329 139.626 31.5337 138.587 30.7354L138.591 30.7334Z" fill="#080808"/>
+<path d="M9.90136 29.7002H0.461929C0.206864 29.7002 0 29.9058 0 30.1592V39.5393C0 39.9486 0.49808 40.1542 0.789299 39.8646L10.2287 30.4845C10.52 30.1952 10.3131 29.7002 9.90136 29.7002Z" fill="#0063FF"/>
+<path d="M5.58521 8H15.2878C20.5517 8 24.8256 12.247 24.8256 17.4799C24.8256 22.7109 20.5517 26.9599 15.2858 26.9599H3.21932C2.96426 26.9599 2.7594 26.7543 2.7594 26.5029V10.8081C2.7574 9.25934 4.0247 8 5.58521 8Z" fill="#0063FF"/>
+</g>
+<defs>
+<clipPath id="clip0_8135_16161">
+<rect width="149" height="32" fill="white" transform="translate(0 8)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/assets/testimonials/renan-araujo.png b/src/assets/testimonials/renan-araujo.png
deleted file mode 100644
index 19e32d7b..00000000
Binary files a/src/assets/testimonials/renan-araujo.png and /dev/null differ
diff --git a/src/assets/testimonials/renan-araujo.webp b/src/assets/testimonials/renan-araujo.webp
new file mode 100644
index 00000000..39af031d
Binary files /dev/null and b/src/assets/testimonials/renan-araujo.webp differ
diff --git a/src/assets/testimonials/scott-macdougall.jpeg b/src/assets/testimonials/scott-macdougall.jpeg
deleted file mode 100644
index bd10fd7c..00000000
Binary files a/src/assets/testimonials/scott-macdougall.jpeg and /dev/null differ
diff --git a/src/assets/testimonials/scott-macdougall.webp b/src/assets/testimonials/scott-macdougall.webp
new file mode 100644
index 00000000..96247a94
Binary files /dev/null and b/src/assets/testimonials/scott-macdougall.webp differ
diff --git a/src/assets/testimonials/taha-tesser.png b/src/assets/testimonials/taha-tesser.png
deleted file mode 100644
index e2a1c58d..00000000
Binary files a/src/assets/testimonials/taha-tesser.png and /dev/null differ
diff --git a/src/assets/testimonials/taha-tesser.webp b/src/assets/testimonials/taha-tesser.webp
new file mode 100644
index 00000000..9be13b1d
Binary files /dev/null and b/src/assets/testimonials/taha-tesser.webp differ
diff --git a/src/components/banner.astro b/src/components/banner.astro
deleted file mode 100644
index aefc16df..00000000
--- a/src/components/banner.astro
+++ /dev/null
@@ -1,20 +0,0 @@
----
-import { InfoIcon } from '@phosphor-icons/react';
-import { Button } from '@/components/ui/button';
-
-const { link, title, description } = Astro.props;
----
-
-<div
-  class="mx-auto flex w-11/12 items-center gap-4 py-3 xl:w-10/12 2xl:w-[1280px]"
->
-  <a href={link}>
-    <Button variant="outline" size="sm" className="font-light">
-      <span class="text-accent-secondary-1">
-        <InfoIcon />
-      </span>
-      {title}
-    </Button>
-  </a>
-  <p class="text-text-2 text-sm">{description}</p>
-</div>
diff --git a/src/components/blog/blog-callout.tsx b/src/components/blog/blog-callout.tsx
deleted file mode 100644
index ee2f8320..00000000
--- a/src/components/blog/blog-callout.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { Ellipse } from '@/components/ellipse';
-import { GradientOutlineButton } from '@/components/ui/button';
-import config from '@/config';
-import NewsletterSignupForm from '../newsletter/newsletter-form';
-
-function BlogCallout() {
-  return (
-    <div className="border-border-1 max-w-screen-md rounded-xl border p-5">
-      <span className="text-text-2 my-0 font-light">
-        Shorebird empowers Flutter teams to focus on building great apps by
-        handling the hard parts like zero-config CI or instant over-the-air
-        updates.
-      </span>
-      <a
-        target="_blank"
-        href={config.consoleUrl}
-        className="mt-4 inline-block w-full px-4 py-2"
-      >
-        <GradientOutlineButton className="w-full">
-          <Ellipse /> Get started
-        </GradientOutlineButton>
-      </a>
-      <div className="text-text-2 before:border-border-1 after:border-border-1 flex items-center py-3 text-sm before:me-6 before:flex-1 before:border-t after:ms-6 after:flex-1 after:border-t">
-        OR
-      </div>
-      <NewsletterSignupForm />
-    </div>
-  );
-}
-
-export { BlogCallout };
diff --git a/src/components/ellipse.tsx b/src/components/ellipse.tsx
deleted file mode 100644
index 7a475c07..00000000
--- a/src/components/ellipse.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-function Ellipse({ className }: { className?: string }) {
-  return (
-    <svg
-      xmlns="http://www.w3.org/2000/svg"
-      className={className}
-      width="20"
-      height="21"
-      viewBox="0 0 20 21"
-      fill="none"
-    >
-      <circle cx="10" cy="10.5" r="4" fill="url(#paint0_linear_3053_5381)" />
-      <circle
-        cx="10"
-        cy="10.5"
-        r="7"
-        stroke="url(#paint1_linear_3053_5381)"
-        strokeOpacity="0.25"
-        strokeWidth="6"
-      />
-      <defs>
-        <linearGradient
-          id="paint0_linear_3053_5381"
-          x1="6"
-          y1="10.5"
-          x2="14"
-          y2="10.5"
-          gradientUnits="userSpaceOnUse"
-        >
-          <stop stopColor="#46CEFF" />
-          <stop offset="1" stopColor="#17FFCD" />
-        </linearGradient>
-        <linearGradient
-          id="paint1_linear_3053_5381"
-          x1="6"
-          y1="10.5"
-          x2="14"
-          y2="10.5"
-          gradientUnits="userSpaceOnUse"
-        >
-          <stop stopColor="#46CEFF" />
-          <stop offset="1" stopColor="#17FFCD" />
-        </linearGradient>
-      </defs>
-    </svg>
-  );
-}
-
-export { Ellipse };
diff --git a/src/components/home/benefits.astro b/src/components/home/benefits.astro
new file mode 100644
index 00000000..2b9a0918
--- /dev/null
+++ b/src/components/home/benefits.astro
@@ -0,0 +1,53 @@
+---
+/**
+ * "Benefits β€” Make impactful decisions quickly" (Webflow `.c_grid_3cols` of
+ * `.c_card_s`).
+ */
+import { CubeIcon, HourglassIcon, WrenchIcon } from '@phosphor-icons/react';
+import Section from '@/components/ui/section.astro';
+
+const benefits = [
+  {
+    icon: WrenchIcon,
+    title: 'Deploy patches without delays',
+    description: 'Waiting for the next app review cycle',
+  },
+  {
+    icon: HourglassIcon,
+    title: 'Phase out support',
+    description: 'For older versions',
+  },
+  {
+    icon: CubeIcon,
+    title: "See what's being shipped",
+    description: 'Monitor adoption across versions',
+  },
+];
+---
+
+<Section theme="light" id="benefits">
+  <div class="grid grid-cols-12 gap-x-column-gap gap-y-row-gap">
+    <div class="hidden lg:col-span-2 lg:block"></div>
+    <div
+      class="col-span-12 flex h-full flex-col items-center justify-center text-center lg:col-span-8"
+    >
+      <p class="body-s-strong text-brand-secondary pb-text-s">Benefits</p>
+      <h2 class="title-l pb-text-m">Make impactful decisions quickly</h2>
+      <p class="body-m">The ultimate insurance policy for business continuity</p>
+    </div>
+  </div>
+  <div class="pb-section-xs"></div>
+  <div class="bg-border grid grid-cols-1 items-center gap-px md:grid-cols-3">
+    {
+      benefits.map((benefit) => (
+        <div class="bg-surface-1 flex h-full flex-col items-center py-8 text-center md:py-10 md:pr-8 md:pl-10">
+          <span class="badge-icon-secondary mb-text-s">
+            <benefit.icon size={24} weight="fill" />
+          </span>
+          <p class="body-l text-text-1 pb-text-xs">{benefit.title}</p>
+          <p class="body-m">{benefit.description}</p>
+        </div>
+      ))
+    }
+  </div>
+</Section>
diff --git a/src/components/home/blog-overview.astro b/src/components/home/blog-overview.astro
deleted file mode 100644
index 2ad1e752..00000000
--- a/src/components/home/blog-overview.astro
+++ /dev/null
@@ -1,74 +0,0 @@
----
-import { ArrowRightIcon } from '@phosphor-icons/react';
-import { Button } from '@/components/ui/button';
-import { Card, CardHeader, CardContent } from '@/components/ui/card';
-import { getCollection } from 'astro:content';
-import { Image } from 'astro:assets';
-import { Spacer } from '@/components/ui/spacer';
-import FormattedDate from '@/components/blog/formatted-date.astro';
-
-const sortByDate = (a: any, b: any) =>
-  new Date(b.data.date).valueOf() - new Date(a.data.date).valueOf();
-const posts = (await getCollection('blog')).sort(sortByDate).slice(0, 2);
-const images = import.meta.glob<{ default: ImageMetadata }>(
-  '/src/assets/blog/covers/*.{jpeg,jpg,png,gif}'
-);
-const postImages = posts.map((post) => {
-  const cover = post.data.cover;
-  if (images[`/src/assets/blog/covers/${cover}`]) {
-    return images[`/src/assets/blog/covers/${cover}`];
-  }
-  throw new Error(`Cover image for blog ${post.data.title} not found`);
-});
----
-
-<section
-  id="blog"
-  class="mx-auto flex w-10/12 flex-col items-start py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <h1 class="text-text-1 text-4xl">Read our blog</h1>
-  <Spacer />
-  <div
-    class="flex w-full flex-col items-start justify-between gap-6 md:flex-row"
-  >
-    <h3 class="text-text-2 text-lg lg:text-center">
-      Stay up-to-date on all things Shorebird.
-    </h3>
-    <a href="/blog" class="w-full md:w-auto">
-      <Button variant="outline" className="w-full font-light">
-        View all blogs <ArrowRightIcon className="size-5" weight="bold" />
-      </Button>
-    </a>
-  </div>
-  <Spacer className="h-10" />
-  <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-    {
-      posts.map((post, index) => (
-        <a href={`/blog/${post.id}`} class="hover:no-underline">
-          <Card className="gap-2 py-0 cursor-pointer border-2 border-border-1 hover:border-accent-secondary-1">
-            <CardHeader className="p-0">
-              <Image
-                src={postImages[index]()}
-                alt={`${post.data.title} cover image`}
-                class="w-full rounded-xl object-cover"
-              />
-            </CardHeader>
-            <CardContent className="p-4">
-              <div class="flex flex-col gap-3">
-                <p class="text-text-2 text-sm">
-                  <FormattedDate date={post.data.date} />
-                </p>
-                <h1 class="text-text-1 text-xl hover:underline">
-                  {post.data.title}
-                </h1>
-              </div>
-              <p class="text-text-2 overflow-hidden text-ellipsis whitespace-nowrap">
-                {post.data.description}
-              </p>
-            </CardContent>
-          </Card>
-        </a>
-      ))
-    }
-  </div>
-</section>
diff --git a/src/components/home/brands.astro b/src/components/home/brands.astro
index 3f199c0b..db4dc3f8 100644
--- a/src/components/home/brands.astro
+++ b/src/components/home/brands.astro
@@ -1,94 +1,57 @@
 ---
+/**
+ * "Trusted by" logo marquee (Webflow `.c_logo_marquee`). Logos come from
+ * `src/data/logos.json` (the Webflow "Logos" CMS collection, in CMS order).
+ */
 import { Marquee } from '@/components/ui/marquee';
-import ApnaKlubLogo from '@/assets/brands/apna-klub.png';
-import ChaiLogo from '@/assets/brands/chai.png';
-import FlashCoLogo from '@/assets/brands/flash-co.png';
-import InvoiceHomeLogo from '@/assets/brands/invoice-home.png';
-import JungleeLogo from '@/assets/brands/junglee.png';
-import KalshiLogo from '@/assets/brands/kalshi.png';
-import KijijiLogo from '@/assets/brands/kijiji.png';
-import PushPressLogo from '@/assets/brands/pushpress.png';
-import SolidesLogo from '@/assets/brands/solides.png';
-import TrackerLogo from '@/assets/brands/tracker.png';
-import TradelingLogo from '@/assets/brands/tradeling.png';
+import logos from '@/data/logos.json';
 
-const brands = [
-  {
-    name: 'Junglee Games',
-    url: 'https://www.jungleegames.com',
-    image: JungleeLogo,
-  },
-  {
-    name: 'Kijiji',
-    url: 'https://www.kijiji.ca',
-    image: KijijiLogo,
-  },
-  {
-    name: 'Tracker',
-    url: 'https://tracker.fi',
-    image: TrackerLogo,
-  },
-  {
-    name: 'CHAI',
-    url: 'https://chai-research.com/',
-    image: ChaiLogo,
-  },
-  {
-    name: 'Kalshi',
-    url: 'https://kalshi.com',
-    image: KalshiLogo,
-  },
-  {
-    name: 'ApnaKlub',
-    url: 'https://www.apnaklub.com',
-    image: ApnaKlubLogo,
-  },
-  {
-    name: 'Flash.co',
-    url: 'https://flash.co',
-    image: FlashCoLogo,
-  },
-  {
-    name: 'Tradeling',
-    url: 'https://www.tradeling.com',
-    image: TradelingLogo,
-  },
-  {
-    name: 'Invoice Home',
-    url: 'https://invoicehome.com',
-    image: InvoiceHomeLogo,
-  },
-  {
-    name: 'PushPress',
-    url: 'https://pushpress.com',
-    image: PushPressLogo,
-  },
-  {
-    name: 'Solides',
-    url: 'https://solides.com.br',
-    image: SolidesLogo,
-  }
-];
+const images = import.meta.glob<{ default: ImageMetadata }>(
+  '/src/assets/brands/*.{svg,png,webp}',
+  { eager: true },
+);
+const brands = logos.map((logo) => {
+  const image = images[logo.logo];
+  if (!image) throw new Error(`Logo image ${logo.logo} not found`);
+  return { name: logo.name, image: image.default };
+});
 ---
 
-<section
-  id="brands"
-  class="mx-auto flex w-full flex-col xl:w-10/12 2xl:w-[1280px]"
+<div
+  class="page-container flex flex-col items-center gap-column-gap md:flex-row"
 >
-  <div class="m-auto flex flex-row items-center justify-center">
-    <Marquee fade={true} direction="left" reverse={false}>
+  <p class="body-s-strong shrink-0">Trusted by</p>
+  <div
+    class="relative w-full min-w-0 flex-1 overflow-hidden"
+    style="--duration: 15s"
+  >
+    <Marquee
+      className="gap-10"
+      innerClassName="gap-10 pr-0 [--gap:2.5rem]"
+      numberOfCopies={3}
+    >
       {
         brands.map((brand) => (
-          <div
-            id={brand.name}
-            class="contrast saturate flex max-w-32 items-center justify-center py-6 grayscale"
-          >
-            <a target="_blank" href={brand.url}>
-              <img src={brand.image.src} alt={brand.name} />
-            </a>
-          </div>
+          <img
+            src={brand.image.src}
+            width={brand.image.width}
+            height={brand.image.height}
+            alt={brand.name}
+            loading="lazy"
+            class="h-12 w-auto max-w-none"
+          />
         ))
       }
     </Marquee>
+    <div
+      aria-hidden="true"
+      class="from-surface-1 pointer-events-none absolute inset-y-0 left-0 w-16 bg-linear-to-r to-transparent"
+    >
+    </div>
+    <div
+      aria-hidden="true"
+      class="from-surface-1 pointer-events-none absolute inset-y-0 right-0 w-16 bg-linear-to-l to-transparent"
+    >
+    </div>
   </div>
-</section>
+</div>
diff --git a/src/components/home/callout.astro b/src/components/home/callout.astro
deleted file mode 100644
index c69c2df5..00000000
--- a/src/components/home/callout.astro
+++ /dev/null
@@ -1,35 +0,0 @@
----
-import { Button, GradientOutlineButton } from '@/components/ui/button';
-import { Card } from '@/components/ui/card';
-import { Ellipse } from '@/components/ellipse';
-import config from '@/config';
----
-
-<div
-  class="mx-auto flex w-11/12 justify-center items-center py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <Card
-    className="w-full p-6 lg:p-16 flex flex-col items-center justify-center"
-  >
-    <h2 class="text-text-1 text-4xl text-center">
-      Start shipping fast, <span class="gradient-text">today!</span>
-    </h2>
-    <p class="text-text-2 text-center">
-      It takes less than 5 minutes to integrate with your current codebase.
-    </p>
-    <div
-      class="flex w-full items-center justify-center flex-col md:flex-row gap-4 mt-6"
-    >
-      <a href={config.consoleUrl} class="w-full md:w-auto">
-        <GradientOutlineButton className="font-light w-full">
-          <Ellipse /> Try it now
-        </GradientOutlineButton>
-      </a>
-      <a href={config.newsletterSubscriptionUrl} class="w-full md:w-auto">
-        <Button variant="outline" className="font-light w-full">
-          Subscribe to our newsletter
-        </Button>
-      </a>
-    </div>
-  </Card>
-</div>
diff --git a/src/components/home/enterprise.astro b/src/components/home/enterprise.astro
new file mode 100644
index 00000000..c29c6e78
--- /dev/null
+++ b/src/components/home/enterprise.astro
@@ -0,0 +1,52 @@
+---
+/**
+ * "Enterprise-scale infrastructure" β€” the dark card inside a light band
+ * (Webflow `.c_cta_card` in a `.g_page--container.is--large`).
+ */
+import { Image } from 'astro:assets';
+import { ButtonLink } from '@/components/ui/button';
+import Section from '@/components/ui/section.astro';
+import globe from '@/assets/home/enterprise-globe.webp';
+import config from '@/config';
+---
+
+<Section theme="light" container="large" id="enterprise">
+  <div
+    data-theme="dark"
+    class="bg-surface-1 grid grid-cols-1 gap-16 rounded-3xl px-6 py-8 md:p-16 lg:grid-cols-2"
+  >
+    <div class="flex h-full flex-col items-start justify-center">
+      <h2 class="title-l pb-text-s">Enterprise-scale infrastructure</h2>
+      <p class="body-m pb-text-xl">
+        Our global distribution network ensures patches reach users quickly,
+        anywhere in the world
+      </p>
+      <div class="flex w-full flex-col gap-4 md:w-auto md:flex-row">
+        <ButtonLink variant="primary" href={`${config.consoleUrl}/login`}>
+          Try for Free
+        </ButtonLink>
+        <ButtonLink
+          variant="secondary"
+          href={config.enterpriseDemoUrl}
+          target="_blank"
+          trailing="dot"
+        >
+          View our Demo
+        </ButtonLink>
+      </div>
+    </div>
+    <div
+      class="-order-1 flex h-full flex-col items-center justify-start lg:order-none lg:items-start lg:justify-center"
+    >
+      <div class="w-full overflow-hidden rounded-2xl">
+        <Image
+          src={globe}
+          widths={[500, 800, 1080, 1476]}
+          sizes="(max-width: 1023px) 100vw, 600px"
+          alt=""
+          class="w-full"
+        />
+      </div>
+    </div>
+  </div>
+</Section>
diff --git a/src/components/home/faq-overview.tsx b/src/components/home/faq-overview.tsx
deleted file mode 100644
index 7fa2b069..00000000
--- a/src/components/home/faq-overview.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import { Markdown } from '@/components/ui/markdown';
-import {
-  Accordion,
-  AccordionContent,
-  AccordionItem,
-  AccordionTrigger,
-} from '@/components/ui/accordion';
-
-const faqs = [
-  {
-    question: 'Does Shorebird work for existing apps?',
-    answer:
-      'Yes. Shorebird requires no code changes to your Flutter app to adopt. See our [quick start guide](https://docs.shorebird.dev/guides/code_push_quickstart) to get started.',
-  },
-  {
-    question: 'Does Shorebird comply with Play Store and App Store guidelines?',
-    answer:
-      'Yes. Shorebird has been designed to comply with Play Store and App Store guidelines. Code push is common in the industry, including several other commercial update products from Microsoft [App Center](https://appcenter.ms), [Expo](https://expo.dev), and [Ionic](https://ionic.io/). Refer to the [FAQs](https://docs.shorebird.dev/faq#does-shorebird-comply-with-play-store-guidelines) for more info.',
-  },
-  {
-    question: 'Can I use this in production?',
-    answer:
-      'Yes! Shorebird is production ready on iOS and Android and has been used in production by thousands of apps since early 2023.  We safely deliver millions of patches every month on behalf of our customers.',
-  },
-  {
-    question: 'Can Shorebird see my source code?',
-    answer:
-      'No. Shorebird never stores or transmits your source code. See our [documentation](https://docs.shorebird.dev/faq/#does-shorebird-store-my-source-code) for more information.',
-  },
-  {
-    question: 'Can I self-host Shorebird or do you offer on-prem?',
-    answer:
-      'No. Shorebird only offers a centrally hosted solution at this time.',
-  },
-  {
-    question: 'Where is the roadmap?',
-    answer:
-      'Shorebird is developed entirely in the public, including our [project boards](https://github.com/orgs/shorebirdtech/projects) shows what we are currently working on.',
-  },
-];
-
-function FaqOverview() {
-  return (
-    <Accordion type="multiple" className="w-full">
-      {faqs.map((faq, index) => (
-        <AccordionItem value={`faq-${index}`} key={index}>
-          <AccordionTrigger>{faq.question}</AccordionTrigger>
-          <AccordionContent className="markdown">
-            <Markdown content={faq.answer} />
-          </AccordionContent>
-        </AccordionItem>
-      ))}
-    </Accordion>
-  );
-}
-
-export { FaqOverview };
diff --git a/src/components/home/faq.astro b/src/components/home/faq.astro
index 69af953c..094b556b 100644
--- a/src/components/home/faq.astro
+++ b/src/components/home/faq.astro
@@ -1,28 +1,171 @@
 ---
-import { ArrowRightIcon } from '@phosphor-icons/react';
-import { FaqOverview } from '@/components/home/faq-overview';
-import { GradientOutlineButton } from '@/components/ui/button';
+/**
+ * "Frequently Asked Questions" (the Webflow "brix" accordion block on the
+ * homepage: `.cloneable-container-default` / `.accordion-item---brix`).
+ * Ported as native `<details>` elements, no JS.
+ */
+import { CaretRightIcon } from '@phosphor-icons/react';
+import Section from '@/components/ui/section.astro';
+
+export interface Faq {
+  question: string;
+  /** Plain text or a small HTML fragment (links). */
+  answer: string;
+}
+
+export interface Props {
+  /** Defaults to the homepage questions. */
+  faqs?: Faq[];
+}
+
+const defaultFaqs: Faq[] = [
+  {
+    question: 'How does Shorebird relate to Flutter?',
+    answer:
+      'Shorebird provides services on top of Flutter and in collaboration with Flutter tooling you already know and love.',
+  },
+  {
+    question: 'Can I self-host Shorebird?',
+    answer:
+      'No. Shorebird has no current plans to offer on-prem, self-host or cloud-prem offerings. We would be happy to discuss with you any and all ways in which we can improve our centrally hosted solution to best match your needs.',
+  },
+  {
+    question: 'How does Shorebird handle user data, privacy, and security?',
+    answer:
+      'Shorebird is designed for privacy. We do not collect, process, or store any end-user data, nor do we ever see your source code. We only store the necessary built application archives (such as .xcarchive or .aab) and release metadata required to deliver patches.',
+  },
+];
+
+const { faqs = defaultFaqs } = Astro.props;
 ---
 
-<section
-  id="faq"
-  class="mx-auto flex w-10/12 flex-col py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <div class="grid grid-cols-1 gap-2 lg:grid-cols-3 lg:gap-16">
-    <div class="flex flex-col items-start gap-6">
-      <h2 class="text-4xl font-medium">FAQ</h2>
-      <span class="text-text-2">
-        Check out the top frequently asked questions. For a more comprehensive
-        list, head to our documentation site.
-      </span>
-      <a href="https://docs.shorebird.dev/faq" class="w-full md:w-auto">
-        <GradientOutlineButton className="w-full font-light">
-          Go to Docs <ArrowRightIcon className="size-5" weight="bold" />
-        </GradientOutlineButton>
-      </a>
-    </div>
-    <div class="col-span-2">
-      <FaqOverview client:load />
+<Section theme="light" container="none" id="faq">
+  <div
+    class="faq-block mx-auto w-full max-w-[940px] rounded-[20px] bg-white px-4 py-16 sm:px-6 sm:py-20 md:px-10 md:py-[100px]"
+  >
+    <div class="mx-auto max-w-[886px]">
+      <p class="body-m-strong text-text-3 pb-1">Frequently Asked Questions</p>
+      {
+        faqs.map((faq) => (
+          <details class="faq-item group">
+            <summary class="faq-trigger">
+              <span class="faq-title">{faq.question}</span>
+              <span class="faq-arrow" aria-hidden="true">
+                <CaretRightIcon size={18} weight="bold" />
+              </span>
+            </summary>
+            <p class="faq-answer body-m" set:html={faq.answer} />
+          </details>
+        ))
+      }
     </div>
   </div>
-</section>
+</Section>
+
+<style>
+  .faq-item {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    background-color: #fff;
+    border: 2px solid transparent;
+    border-radius: 14px;
+    padding: 32px;
+    margin-bottom: 16px;
+    cursor: pointer;
+    box-shadow: 0 5px 16px #080f340f;
+    transition:
+      border-color 0.2s,
+      box-shadow 0.2s;
+  }
+  @media (min-width: 768px) {
+    .faq-item {
+      padding: 40px;
+      margin-bottom: 20px;
+    }
+  }
+  @media (min-width: 992px) {
+    .faq-item {
+      margin-bottom: 32px;
+    }
+  }
+  .faq-item:hover {
+    border-color: #816aa8;
+    box-shadow: 0 14px 21px #4a3aff0f;
+  }
+  .faq-trigger {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    gap: 16px;
+    list-style: none;
+  }
+  .faq-trigger::-webkit-details-marker {
+    display: none;
+  }
+  .faq-title {
+    max-width: 80%;
+    color: #170f49;
+    font-size: 18px;
+    font-weight: 500;
+    line-height: 28px;
+  }
+  @media (max-width: 479px) {
+    .faq-title {
+      max-width: 70%;
+      font-size: 20px;
+    }
+  }
+  @media (min-width: 768px) {
+    .faq-title {
+      max-width: 88%;
+      font-size: 22px;
+    }
+  }
+  @media (min-width: 992px) {
+    .faq-title {
+      max-width: none;
+    }
+  }
+  .faq-arrow {
+    display: flex;
+    flex: none;
+    align-items: center;
+    justify-content: center;
+    width: 40px;
+    height: 40px;
+    border-radius: 50%;
+    background-color: #fff;
+    color: #816aa8;
+    box-shadow: 0 5px 16px #080f340f;
+  }
+  @media (min-width: 768px) {
+    .faq-arrow {
+      width: 50px;
+      height: 50px;
+    }
+  }
+  .faq-arrow :global(svg) {
+    transition: transform 0.2s;
+  }
+  .faq-item[open] .faq-arrow :global(svg) {
+    transform: rotate(90deg);
+  }
+  .faq-answer {
+    max-width: 100%;
+    margin-top: 18px;
+    font-size: 16px;
+    line-height: 1.6;
+  }
+  @media (min-width: 992px) {
+    .faq-answer {
+      max-width: 90%;
+      font-size: var(--font-size-body-m);
+    }
+  }
+  .faq-answer :global(a) {
+    color: #816aa8;
+    text-decoration: underline;
+    text-underline-offset: 3px;
+  }
+</style>
diff --git a/src/components/home/features.astro b/src/components/home/features.astro
deleted file mode 100644
index e827c6e6..00000000
--- a/src/components/home/features.astro
+++ /dev/null
@@ -1,117 +0,0 @@
----
-import config from '@/config';
-import { GradientOutlineButton } from '@/components/ui/button';
-import {
-  Card,
-  CardHeader,
-  CardTitle,
-  CardContent,
-  CardFooter,
-} from '@/components/ui/card';
-import { Ellipse } from '@/components/ellipse';
-import { Spacer } from '@/components/ui/spacer';
-import {
-  ArrowRightIcon,
-  LightningIcon,
-  CheckCircleIcon,
-  ClockCountdownIcon,
-  CalendarDotsIcon,
-  TagIcon,
-  QueueIcon,
-  HandPeaceIcon,
-  ArrowCounterClockwiseIcon,
-} from '@phosphor-icons/react';
-
-const features = [
-  {
-    title: 'Ship Faster',
-    description: 'Get fixes in customers hands on your schedule.',
-    icon: LightningIcon,
-  },
-  {
-    title: 'Roll Back',
-    description: 'Roll back any updates with the click of a button.',
-    icon: ArrowCounterClockwiseIcon,
-  },
-  {
-    title: 'Hyper-frequent Updates',
-    description: 'Ship multiple times a day with confidence.',
-    icon: ClockCountdownIcon,
-  },
-  {
-    title: 'Level Playing Field',
-    description:
-      'Provide a consistent experience to all users, regardless of platform.',
-    icon: CheckCircleIcon,
-  },
-  {
-    title: 'Seasonal Events',
-    description: 'Instantly deploy updates during critical times of the year.',
-    icon: CalendarDotsIcon,
-  },
-  {
-    title: 'White-label',
-    description: 'Ship to thousands of apps directly from your CI.',
-    icon: TagIcon,
-  },
-  {
-    title: 'Seamless Collaboration',
-    description:
-      'Provide instant access to the latest iterations to all collaborators.',
-    icon: QueueIcon,
-  },
-  {
-    title: 'Peace of Mind',
-    description: 'Rest easy knowing a fix is just a click away.',
-    icon: HandPeaceIcon,
-  },
-];
----
-
-<section
-  id="features"
-  class="mx-auto flex w-10/12 flex-col items-start py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <h1 class="text-text-1 text-4xl">
-    Give your team <span class="gradient-text">superpowers</span>
-  </h1>
-  <Spacer />
-  <div
-    class="flex w-full flex-col items-start justify-between gap-6 md:flex-row"
-  >
-    <h3 class="text-text-2 text-lg lg:text-center">
-      Deliver the best possible experience to your users, regardless of
-      platform.
-    </h3>
-    <a href={config.docsUrl} class="w-full md:w-auto">
-      <GradientOutlineButton className="w-full font-light">
-        Learn more <ArrowRightIcon className="size-5" weight="bold" />
-      </GradientOutlineButton>
-    </a>
-  </div>
-  <Spacer className="h-10" />
-  <div class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3">
-    {
-      features.map((feature) => (
-        <Card>
-          <CardHeader>
-            <feature.icon className="text-accent-primary-1 size-10" />
-          </CardHeader>
-          <CardTitle>{feature.title}</CardTitle>
-          <CardContent>{feature.description}</CardContent>
-        </Card>
-      ))
-    }
-    <Card>
-      <CardTitle>Get started today!</CardTitle>
-      <CardContent>Setup Shorebird in minutes for free! </CardContent>
-      <CardFooter>
-        <a href={config.consoleUrl}>
-          <GradientOutlineButton className="font-light">
-            <Ellipse /> Try it now
-          </GradientOutlineButton>
-        </a>
-      </CardFooter>
-    </Card>
-  </div>
-</section>
diff --git a/src/components/home/for-developers.astro b/src/components/home/for-developers.astro
deleted file mode 100644
index 82c76874..00000000
--- a/src/components/home/for-developers.astro
+++ /dev/null
@@ -1,57 +0,0 @@
----
-import { ArrowRightIcon, CheckIcon } from '@phosphor-icons/react';
-import { Button, GradientOutlineButton } from '@/components/ui/button';
-import { Image } from 'astro:assets';
-import config from '@/config';
-import QuickFix from '@/assets/features/quick-fix.png';
-import SocialProof from '@/assets/features/social-proof.png';
----
-
-<section
-  id="developers"
-  class="mx-auto flex w-10/12 flex-col py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <div class="grid grid-cols-1 gap-12 lg:grid-cols-2">
-    <Image class="rounded-xl" src={QuickFix} alt="Fix bugs quickly" />
-    <div class="flex flex-col justify-center gap-6 lg:items-start">
-      <div class="flex flex-row items-center gap-4">
-        <Image height={36} src={SocialProof} alt="Social proof" />
-        <span class="text-text-1 md:text-lg">2,500+ teams use us</span>
-      </div>
-      <h2 class="text-4xl font-medium">For Developers</h2>
-      <span class="text-text-2">
-        With Shorebird, development teams can quickly deploy fixes instead of
-        waiting for full app releases.
-      </span>
-      <ul class="flex flex-col gap-4">
-        <li class="flex flex-row items-start gap-2">
-          <CheckIcon className="text-accent-primary-1 size-6" /> Iterate quickly
-          and confidently
-        </li>
-        <li class="flex flex-row items-start gap-2">
-          <CheckIcon className="text-accent-primary-1 size-6" />Hotfix in
-          seconds, not days
-        </li>
-        <li class="flex flex-row items-start gap-2">
-          <CheckIcon className="text-accent-primary-1 size-6" />No need for
-          legacy code path maintenance
-        </li>
-        <div class="mt-6 flex w-full flex-row items-start gap-4">
-          <a href={config.consoleUrl}>
-            <GradientOutlineButton className="font-light">
-              Get started <ArrowRightIcon className="size-5" weight="bold" />
-            </GradientOutlineButton>
-          </a>
-          <a href="/blog">
-            <Button variant="outline" className="font-light">
-              Learn more <ArrowRightIcon
-                className="size-5"
-                weight="bold"
-              /></Button
-            >
-          </a>
-        </div>
-      </ul>
-    </div>
-  </div>
-</section>
diff --git a/src/components/home/for-teams.astro b/src/components/home/for-teams.astro
deleted file mode 100644
index f8f71fd8..00000000
--- a/src/components/home/for-teams.astro
+++ /dev/null
@@ -1,53 +0,0 @@
----
-import { ArrowRightIcon, CheckIcon } from '@phosphor-icons/react';
-import { Button, GradientOutlineButton } from '@/components/ui/button';
-import { Image } from 'astro:assets';
-import config from '@/config';
-import Releases from '@/assets/features/releases.png';
----
-
-<section
-  id="teams"
-  class="mx-auto flex w-10/12 flex-col py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <div class="grid grid-cols-1 gap-12 lg:grid-cols-2">
-    <div class="flex flex-col justify-center gap-6 lg:items-start">
-      <h2 class="text-4xl font-medium">For Teams</h2>
-      <span class="text-text-2">
-        Adding Shorebird to your application allows product teams to make
-        impactful decisions quickly instead of having to wait for the next app
-        review cycle.
-      </span>
-      <ul class="flex flex-col gap-4">
-        <li class="flex flex-row items-start gap-2">
-          <CheckIcon className="text-accent-primary-1 size-6" /> Respond to customer
-          issues and complaints quickly
-        </li>
-        <li class="flex flex-row items-start gap-2">
-          <CheckIcon className="text-accent-primary-1 size-6" />Easily phase out
-          support for older app versions
-        </li>
-        <li class="flex flex-row items-start gap-2">
-          <CheckIcon className="text-accent-primary-1 size-6" />Fix customer
-          complaints in seconds, not days
-        </li>
-        <div class="mt-6 flex w-full flex-row items-start gap-4">
-          <a href={config.consoleUrl}>
-            <GradientOutlineButton className="font-light">
-              Get started <ArrowRightIcon className="size-5" weight="bold" />
-            </GradientOutlineButton>
-          </a>
-          <a href={config.docsUrl}>
-            <Button variant="outline" className="font-light">
-              Learn more <ArrowRightIcon
-                className="size-5"
-                weight="bold"
-              /></Button
-            >
-          </a>
-        </div>
-      </ul>
-    </div>
-    <Image class="rounded-xl" src={Releases} alt="Patch multiple releases" />
-  </div>
-</section>
diff --git a/src/components/home/hero-motion.tsx b/src/components/home/hero-motion.tsx
index a6660a93..ad666405 100644
--- a/src/components/home/hero-motion.tsx
+++ b/src/components/home/hero-motion.tsx
@@ -2,14 +2,25 @@ import heroMotion from '@/motion/hero-motion.json';
 import { useLottie } from 'lottie-react';
 import { useEffect, useRef } from 'react';
 
+/**
+ * The homepage "home" Lottie (phone + terminal lines) exported from Webflow.
+ * `src/motion/hero-motion.json` is the `animations/main.json` of the
+ * `.lottie` bundle with its single bitmap inlined as a data URI. It is
+ * 1200x565; the parent reserves that aspect ratio so nothing shifts while
+ * the island hydrates.
+ */
 function HeroMotion() {
   const ref = useRef<HTMLDivElement>(null);
   const options = {
     animationData: heroMotion,
     loop: true,
     autoplay: true,
+    rendererSettings: { preserveAspectRatio: 'xMidYMax meet' },
   };
-  const { View, pause, play } = useLottie(options);
+  const { View, pause, play } = useLottie(options, {
+    width: '100%',
+    height: '100%',
+  });
 
   useEffect(() => {
     if (!ref.current) return;
@@ -21,13 +32,17 @@ function HeroMotion() {
           pause();
         }
       },
-      { threshold: 0.5 },
+      { threshold: 0.25 },
     );
     observer.observe(ref.current!);
     return () => observer.disconnect();
   }, [ref, play, pause]);
 
-  return <span ref={ref}>{View}</span>;
+  return (
+    <div ref={ref} className="h-full w-full">
+      {View}
+    </div>
+  );
 }
 
 export { HeroMotion };
diff --git a/src/components/home/hero.astro b/src/components/home/hero.astro
index bb0ddded..f3406ed2 100644
--- a/src/components/home/hero.astro
+++ b/src/components/home/hero.astro
@@ -1,52 +1,61 @@
 ---
-import { Button, GradientOutlineButton } from '@/components/ui/button';
-import { Ellipse } from '@/components/ellipse';
-import { FlutterLogo } from '@/components/logos/flutter-logo';
+/**
+ * Homepage hero (Webflow `header.g_page--section` + `.c_hero_content`).
+ *
+ * Dark band: centered title/subtitle/buttons, then the purple illustration
+ * card (`.c_hero_lottie`: background image + the "home" Lottie animation),
+ * then the "Trusted by" logo marquee. On tablet/mobile the illustration moves
+ * above the title (`.c_hero_lottie { order: -9999 }`).
+ */
+import { ButtonLink } from '@/components/ui/button';
 import { HeroMotion } from '@/components/home/hero-motion';
-import { Spacer } from '@/components/ui/spacer';
+import Section from '@/components/ui/section.astro';
+import Brands from '@/components/home/brands.astro';
+import heroBackground from '@/assets/home/hero-background.webp';
 import config from '@/config';
 ---
 
-<section
-  id="hero"
-  class="mx-auto flex w-11/12 flex-col py-5 xl:w-10/12 2xl:w-[1280px]"
->
-  <div class="flex flex-col justify-center gap-4 lg:flex-row">
+<Section as="header" theme="dark" container="none" id="hero">
+  {/* Webflow `is--section_hero_xl` (10rem / 7.5rem). The live nav overlays the
+      hero (out of flow) whereas ours is in flow, so subtract its height. */}
+  <div class="pb-[calc(var(--spacer-section-hero)-var(--nav-height))]"></div>
+  <div class="page-container flex flex-col gap-section-s">
+    <div class="grid grid-cols-12 gap-x-column-gap gap-y-row-gap">
+      <div class="hidden lg:col-span-3 lg:block"></div>
+      <div
+        class="col-span-12 flex flex-col items-center text-center lg:col-span-6"
+      >
+        <h1 class="title-xxl pb-text-m">Build Flutter apps with confidence</h1>
+        <p class="body-m pb-text-xl">
+          Ship on your timeline, not somebody else’s.
+        </p>
+        <div class="flex w-full flex-col gap-4 md:w-auto md:flex-row">
+          <ButtonLink variant="primary" href={`${config.consoleUrl}/login`}>
+            Try for Free
+          </ButtonLink>
+          <ButtonLink
+            variant="secondary"
+            href={config.demoUrl}
+            target="_blank"
+            trailing="dot"
+          >
+            View our Demo
+          </ButtonLink>
+        </div>
+      </div>
+    </div>
     <div
-      class="flex shrink-0 flex-col items-center justify-center gap-1 lg:items-start"
+      class="relative -order-1 overflow-hidden rounded-t-4xl bg-cover bg-[0_0] lg:order-none"
+      style={`background-image: url(${heroBackground.src});`}
     >
-      <h1 class="text-center text-6xl font-medium">
-        Ship <span class="gradient-text">fast.</span>
-      </h1>
-      <h1 class="text-text-3 text-center text-6xl font-medium line-through">
-        Break things.
-      </h1>
-      <Spacer />
-      <div class="flex flex-row">
-        <span class="text-text-2">
-          Confidently update{' '}
-          <span class="text-text-1">
-            <FlutterLogo className="inline h-6 w-6" /> Flutter apps
-          </span>
-          , instantly.
-        </span>
-      </div>
-      <Spacer />
       <div
-        class="flex w-full flex-row items-center justify-center gap-4 lg:justify-start"
+        class="relative z-[2] flex aspect-[1200/565] w-full items-end justify-center"
       >
-        <a href={config.consoleUrl}>
-          <GradientOutlineButton className="font-light">
-            <Ellipse /> Try it now
-          </GradientOutlineButton>
-        </a>
-        <a href={config.docsUrl}>
-          <Button variant="outline" className="font-light"> Learn more </Button>
-        </a>
+        <HeroMotion client:only="react" />
       </div>
     </div>
-    <div class="flex h-auto w-auto lg:h-[663px] lg:w-[777px]">
-      <HeroMotion client:only />
-    </div>
   </div>
-</section>
+  <div class="pb-section-xs"></div>
+  <Brands />
+  <div class="pb-section-xs"></div>
+</Section>
diff --git a/src/components/home/how-we-help.astro b/src/components/home/how-we-help.astro
new file mode 100644
index 00000000..e44d8081
--- /dev/null
+++ b/src/components/home/how-we-help.astro
@@ -0,0 +1,73 @@
+---
+/**
+ * "How Shorebird can help" list + bug-fix timeline illustration
+ * (Webflow `.c_how_shorebird--item`).
+ */
+import { Image } from 'astro:assets';
+import {
+  ArrowUUpLeftIcon,
+  ShieldCheckIcon,
+  TimerIcon,
+} from '@phosphor-icons/react';
+import Section from '@/components/ui/section.astro';
+import timeline from '@/assets/home/bug-fix-timeline.webp';
+
+const items = [
+  {
+    icon: TimerIcon,
+    title: 'Ship faster',
+    description: 'Deploy fixes in minutes, not days.',
+  },
+  {
+    icon: ArrowUUpLeftIcon,
+    title: 'Instant rollbacks',
+    description: 'Rollback any update with a click of a button.',
+  },
+  {
+    icon: ShieldCheckIcon,
+    title: 'Deploy confidently',
+    description: 'Find issues before they reach production.',
+  },
+];
+---
+
+<Section theme="light" id="how-we-help">
+  <div class="grid grid-cols-12 gap-x-column-gap gap-y-row-gap">
+    <div class="col-span-12 lg:col-span-6">
+      <div class="flex h-full flex-col items-start justify-center">
+        <h2 class="title-l pb-text-xl">How Shorebird can help</h2>
+        {
+          items.map((item, index) => (
+            <>
+              {index > 0 && <div class="divider" />}
+              <div class="flex w-full items-center gap-4 py-10">
+                <span class="badge-icon shrink-0">
+                  <item.icon size={24} weight="fill" />
+                </span>
+                <div class="flex flex-col items-start">
+                  <p class="body-l text-text-1 pb-text-xs">{item.title}</p>
+                  <p class="body-m">{item.description}</p>
+                </div>
+              </div>
+            </>
+          ))
+        }
+      </div>
+    </div>
+    <div class="col-span-12 lg:col-span-6">
+      <div
+        class="flex h-full flex-col items-center justify-start lg:items-start lg:justify-center"
+      >
+        <div class="w-full overflow-hidden rounded-2xl">
+          <Image
+            src={timeline}
+            widths={[500, 800, 1080, 1740]}
+            sizes="(max-width: 1023px) 100vw, 604px"
+            alt="Shorebird deployment workflow showing bug reported to bug fixed process for Flutter apps with live version updates"
+            class="w-full"
+          />
+        </div>
+      </div>
+    </div>
+  </div>
+</Section>
diff --git a/src/components/home/platform.astro b/src/components/home/platform.astro
new file mode 100644
index 00000000..fde0688f
--- /dev/null
+++ b/src/components/home/platform.astro
@@ -0,0 +1,104 @@
+---
+/**
+ * "An opinionated platform for building Flutter apps" (Webflow
+ * `.c_card_demo--s` + `.c_grid_2cols`): the gradient card with the terminal
+ * screenshot, then the Code Push / Shorebird CI columns.
+ */
+import { Image } from 'astro:assets';
+import { FastForwardIcon, LightningIcon } from '@phosphor-icons/react';
+import { ButtonLink } from '@/components/ui/button';
+import Section from '@/components/ui/section.astro';
+import terminalDemo from '@/assets/home/terminal-demo.webp';
+import flutterAppsLogo from '@/assets/home/flutter-apps-logo.svg';
+
+const products = [
+  {
+    icon: LightningIcon,
+    description:
+      'Maximize developer productivity by iterating rapidly with Code Push and optimized CI pipelines',
+    label: 'Explore Code Push',
+    href: '/product/code-push',
+  },
+  {
+    icon: FastForwardIcon,
+    description:
+      'Automate your testing and accelerate your release cycles with a zero-config Flutter CI system',
+    label: 'Explore Shorebird CI',
+    href: '/product/shorebird-ci',
+  },
+];
+---
+
+<Section theme="light" id="platform">
+  <div
+    class="soft-gradient relative flex flex-col items-center overflow-hidden rounded-2xl pt-10 text-center md:pt-16"
+  >
+    <div class="flex w-full flex-col items-center px-6 md:px-10">
+      <h2 class="title-l">An opinionated platform</h2>
+      <div class="flex flex-wrap items-center justify-center">
+        <h2 class="title-l">for building</h2>
+        {/* Webflow `.c_logo--flutter`: 18.125rem wide on desktop, 2rem/2.5rem tall on tablet/mobile. */}
+        <div
+          class="flex h-12 w-full max-w-48 justify-center pt-2 sm:h-8 sm:max-w-[9.5rem] sm:pt-0 sm:pl-2 md:h-auto md:max-w-[18.125rem] md:pl-4"
+        >
+          <img
+            src={flutterAppsLogo.src}
+            width={flutterAppsLogo.width}
+            height={flutterAppsLogo.height}
+            alt="Flutter logo"
+            class="h-full w-auto md:h-auto md:w-full"
+          />
+        </div>
+      </div>
+    </div>
+    <Image
+      src={terminalDemo}
+      widths={[500, 800, 1080, 1424]}
+      sizes="(max-width: 767px) 100vw, 712px"
+      alt="Shorebird CLI creating a Flutter app project, showing dependency resolution, package downloads, and successful project setup"
+      class="w-full max-w-none md:max-w-[44.5rem]"
+    />
+  </div>
+  <div class="pb-section-xs"></div>
+  <div class="bg-border grid grid-cols-1 gap-px md:grid-cols-2">
+    {
+      products.map((product) => (
+        <div class="bg-surface-1 flex h-full flex-col items-center py-8 text-center md:py-10 md:pr-8 md:pl-10 md:text-left">
+          <span class="badge-icon mb-text-s">
+            <product.icon size={24} weight="fill" />
+          </span>
+          <p class="body-l text-text-1 pb-text-xl w-full">
+            {product.description}
+          </p>
+          <ButtonLink
+            variant="secondary"
+            href={product.href}
+            className="w-full md:w-auto"
+          >
+            {product.label}
+          </ButtonLink>
+        </div>
+      ))
+    }
+  </div>
+</Section>
+
+<style>
+  /* Webflow page embed: `.c_overlay--gradient, .c_card_demo--s { background: ... }` */
+  .soft-gradient {
+    background:
+      radial-gradient(
+        137.79% 137.79% at 50% 17.7%,
+        rgba(255, 255, 255, 0.08) 4%,
+        rgba(255, 237, 217, 0.2) 15%,
+        rgba(212, 238, 255, 0.4) 37%,
+        rgba(177, 201, 255, 0.4) 64%
+      ),
+      radial-gradient(
+        170.15% 82.9% at 50% 100%,
+        rgba(255, 238, 226, 0.5) 0%,
+        rgba(241, 241, 241, 0) 100%
+      ),
+      #f9f9f9;
+  }
+</style>
diff --git a/src/components/home/pricing-overview.astro b/src/components/home/pricing-overview.astro
deleted file mode 100644
index 6a5141a8..00000000
--- a/src/components/home/pricing-overview.astro
+++ /dev/null
@@ -1,22 +0,0 @@
----
-import { PricingCalculator } from '@/components/pricing/pricing-calculator';
-import { PricingPlans } from '@/components/pricing/pricing-plans';
-import { Spacer } from '@/components/ui/spacer';
----
-
-<section
-  id="pricing"
-  class="mx-auto flex w-10/12 flex-col py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <div class="flex flex-col items-center justify-center">
-    <h1 class="text-text-1 text-4xl">Pay as you grow</h1>
-    <Spacer />
-    <h3 class="text-text-2 text-center text-lg">
-      Deliver instant updates with pricing that scales as you grow.
-    </h3>
-    <Spacer className="h-10" />
-    <PricingPlans client:load />
-    <Spacer className="h-10" />
-    <PricingCalculator client:load />
-  </div>
-</section>
diff --git a/src/components/home/problem.astro b/src/components/home/problem.astro
deleted file mode 100644
index e038161f..00000000
--- a/src/components/home/problem.astro
+++ /dev/null
@@ -1,59 +0,0 @@
----
-import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';
-import {
-  ClockCountdownIcon,
-  ChartLineIcon,
-  MoneyWavyIcon,
-} from '@phosphor-icons/react';
-import { Spacer } from '@/components/ui/spacer';
-
-const problems = [
-  {
-    title: 'App updates are slow',
-    description:
-      'It can take days, or even weeks, to get updates deployed to all users and platforms.',
-    icon: ClockCountdownIcon,
-  },
-  {
-    title: 'Releasing is expensive',
-    description:
-      'Automating and coordinating releases takes valuable time away from delivering customer value.',
-    icon: MoneyWavyIcon,
-  },
-  {
-    title: 'Deployments are unpredictable',
-    description:
-      'Traditional release processes make it very difficult to estimate when an update will be available to users.',
-    icon: ChartLineIcon,
-  },
-];
----
-
-<section
-  id="problem"
-  class="mx-auto flex w-10/12 flex-col py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <div class="flex flex-col items-center justify-center">
-    <h1 class="text-text-1 text-center text-4xl">Shipping updates is hard</h1>
-    <Spacer />
-    <h3 class="text-text-2 text-center text-lg">
-      Building an app is only half the battle. Delivering and coordinating
-      releases across multiple platforms is a huge source of friction and
-      complexity.
-    </h3>
-    <Spacer className="h-10" />
-    <div class="grid grid-cols-1 gap-6 lg:grid-cols-3">
-      {
-        problems.map((problem) => (
-          <Card>
-            <CardHeader>
-              <problem.icon className="text-accent-primary-1 size-10" />
-            </CardHeader>
-            <CardTitle>{problem.title}</CardTitle>
-            <CardContent>{problem.description}</CardContent>
-          </Card>
-        ))
-      }
-    </div>
-  </div>
-</section>
diff --git a/src/components/home/resources.astro b/src/components/home/resources.astro
index 7e2444a6..098ae590 100644
--- a/src/components/home/resources.astro
+++ b/src/components/home/resources.astro
@@ -1,60 +1,109 @@
 ---
-import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';
-import { Image } from 'astro:assets';
-import { Spacer } from '@/components/ui/spacer';
+/**
+ * "Resources β€” Learn more about Shorebird and chat with the community"
+ * (Webflow `.g_card_resource` grid on a `.c_overlay--gradient` band).
+ */
+import Section from '@/components/ui/section.astro';
 import config from '@/config';
-import Discord from '@/assets/resources/discord.png';
-import Shorebird from '@/assets/resources/shorebird.png';
+import blogImage from '@/assets/home/resource-blog.png';
+import docsImage from '@/assets/home/resource-docs.png';
+import faqImage from '@/assets/home/resource-faq.png';
+import communityImage from '@/assets/home/resource-community.png';
 
 const resources = [
+  { image: blogImage, alt: 'Blog icon', title: 'Read our blog', href: '/blog' },
   {
-    image: Shorebird,
-    title: 'Read the docs',
-    description:
-      'Learn everything you need to get started with Shorebird in just a few minutes from core concepts to detailed tutorials.',
-    url: config.docsUrl,
+    image: docsImage,
+    alt: 'Documentation icon',
+    title: 'View our docs',
+    href: `${config.docsUrl}/`,
+    external: true,
   },
   {
-    image: Discord,
-    title: 'Chat with the community',
-    description:
-      "Ask questions, share what you're building, and participate in discussions with the Shorebird community.",
-    url: config.discordUrl,
+    image: faqImage,
+    alt: 'FAQ icon',
+    title: 'Read our FAQ',
+    href: config.faqUrl,
+    external: true,
+  },
+  {
+    image: communityImage,
+    alt: 'Community icon',
+    title: 'Join our community',
+    href: config.discordUrl,
+    external: true,
   },
 ];
 ---
 
-<section
-  id="resources"
-  class="mx-auto flex w-11/12 flex-col items-center py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <h1 class="text-text-1 text-4xl">Resources</h1>
-  <Spacer />
-  <h3 class="text-text-2 text-center text-lg">
-    Learn more about Shorebird and chat with the community.
-  </h3>
-  <Spacer className="h-10" />
-  <div class="grid grid-cols-1 gap-6 lg:grid-cols-2">
+<Section theme="light" container="none" id="resources">
+  <div class="page-container">
+  <div class="relative z-20 grid grid-cols-12 gap-x-column-gap gap-y-row-gap">
+    <div class="hidden lg:col-span-2 lg:block"></div>
+    <div
+      class="col-span-12 flex h-full flex-col items-center justify-center text-center lg:col-span-8"
+    >
+      <p class="body-s-strong text-brand-primary pb-text-s">Resources</p>
+      <h2 class="title-l">
+        Learn more about Shorebird and chat with the community
+      </h2>
+    </div>
+  </div>
+  <div class="pb-section-s"></div>
+  <div
+    class="relative z-20 grid grid-cols-12 gap-x-column-gap gap-y-section-xs md:gap-y-row-gap"
+  >
     {
       resources.map((resource) => (
-        <a href={resource.url} class="hover:no-underline">
-          <Card className="gap-2 pt-0 cursor-pointer border-2 border-border-1 hover:border-accent-secondary-1">
-            <CardHeader className="p-0">
-              <Image
-                src={resource.image}
-                alt={resource.title}
-                class="w-full rounded-xl object-cover"
+        <a
+          href={resource.href}
+          target={resource.external ? '_blank' : undefined}
+          rel={resource.external ? 'noopener' : undefined}
+          class="bg-surface-1 col-span-12 block h-full w-full rounded-2xl transition-shadow duration-[350ms] hover:no-underline hover:shadow-[0_8px_24px_-8px_#00000026] md:col-span-6 lg:col-span-3"
+        >
+          <div class="flex flex-col items-stretch">
+            <div class="overflow-hidden rounded-2xl">
+              <img
+                src={resource.image.src}
+                width={resource.image.width}
+                height={resource.image.height}
+                alt={resource.alt}
+                loading="lazy"
+                class="h-auto w-full"
               />
-            </CardHeader>
-            <CardTitle className="flex items-center justify-center">
-              {resource.title}
-            </CardTitle>
-            <CardContent className="text-center">
-              {resource.description}
-            </CardContent>
-          </Card>
+            </div>
+            <div class="flex items-center justify-center p-6">
+              <p class="body-l text-text-1">{resource.title}</p>
+            </div>
+          </div>
         </a>
       ))
     }
   </div>
-</section>
+  </div>
+  <div
+    aria-hidden="true"
+    class="soft-gradient pointer-events-none absolute inset-0 z-[1]"
+  >
+  </div>
+</Section>
+
+<style>
+  /* Webflow page embed: `.c_overlay--gradient, .c_card_demo--s { background: ... }` */
+  .soft-gradient {
+    background:
+      radial-gradient(
+        137.79% 137.79% at 50% 17.7%,
+        rgba(255, 255, 255, 0.08) 4%,
+        rgba(255, 237, 217, 0.2) 15%,
+        rgba(212, 238, 255, 0.4) 37%,
+        rgba(177, 201, 255, 0.4) 64%
+      ),
+      radial-gradient(
+        170.15% 82.9% at 50% 100%,
+        rgba(255, 238, 226, 0.5) 0%,
+        rgba(241, 241, 241, 0) 100%
+      ),
+      #f9f9f9;
+  }
+</style>
diff --git a/src/components/home/security.astro b/src/components/home/security.astro
new file mode 100644
index 00000000..c1b9d24d
--- /dev/null
+++ b/src/components/home/security.astro
@@ -0,0 +1,61 @@
+---
+/**
+ * "Secure and Compliant β€” Designed with reliability and trust in mind"
+ * (Webflow `.c_grid_2cols` of `.c_card_l`).
+ */
+import { Image } from 'astro:assets';
+import Section from '@/components/ui/section.astro';
+import securityVersions from '@/assets/home/security-versions.webp';
+import securityWorkflow from '@/assets/home/security-workflow.webp';
+
+const cards = [
+  {
+    title: 'Your code is safe and secure',
+    description: 'No matter how big or small your use case.',
+    image: securityVersions,
+    alt: 'Shorebird version management dashboard with security shield protecting app releases',
+  },
+  {
+    title: 'Reduce your exposure to risk',
+    description: 'Shorten the window between identifying and fixing issues.',
+    image: securityWorkflow,
+    alt: 'Shorebird workflow for analyzing and fixing app bugs with security protection',
+  },
+];
+---
+
+<Section theme="light" id="security">
+  <div class="grid grid-cols-12 gap-x-column-gap gap-y-row-gap">
+    <div class="hidden lg:col-span-1 lg:block"></div>
+    <div
+      class="col-span-12 flex h-full flex-col items-center justify-center text-center lg:col-span-10"
+    >
+      <p class="body-s-strong text-brand-primary pb-text-s">
+        Secure and Compliant
+      </p>
+      <h2 class="title-l">Designed with reliability and trust in mind</h2>
+    </div>
+  </div>
+  <div class="pb-section-s"></div>
+  <div class="bg-border grid grid-cols-1 gap-px md:grid-cols-2">
+    {
+      cards.map((card) => (
+        <div class="bg-surface-1 flex h-full flex-col justify-between py-8 md:py-16 lg:px-16">
+          <div>
+            <h3 class="title-m pb-text-s">{card.title}</h3>
+            <p class="body-s pb-text-xl">{card.description}</p>
+          </div>
+          <div class="overflow-hidden rounded-2xl">
+            <Image
+              src={card.image}
+              widths={[500, 800, 1080, 1416]}
+              sizes="(max-width: 767px) 100vw, 500px"
+              alt={card.alt}
+              class="w-full"
+            />
+          </div>
+        </div>
+      ))
+    }
+  </div>
+</Section>
diff --git a/src/components/home/solution.astro b/src/components/home/solution.astro
deleted file mode 100644
index ad661bff..00000000
--- a/src/components/home/solution.astro
+++ /dev/null
@@ -1,80 +0,0 @@
----
-import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';
-import { FlutterLogo } from '@/components/logos/flutter-logo';
-import { Image } from 'astro:assets';
-import { Spacer } from '@/components/ui/spacer';
-import AllPlatforms from '@/assets/features/all-platforms.png';
-import AnyCode from '@/assets/features/any-code.png';
-import Compliance from '@/assets/features/compliance.png';
-import Rollback from '@/assets/features/rollback.png';
-
-const features = [
-  {
-    image: AllPlatforms,
-    title: 'Works everywhere Flutter does',
-    description:
-      'Build for users, not platforms. Shorebird allows you to push updates everywhere your users are.',
-  },
-  {
-    image: AnyCode,
-    title: 'Change any Dart code',
-    description:
-      'No need to plan ahead. Setup Shorebird in minutes and push updates to any Dart code.',
-  },
-  {
-    image: Rollback,
-    title: 'Rollback changes with no impact',
-    description:
-      'Roll changes back instead of rushing the next build through the release process.',
-  },
-  {
-    image: Compliance,
-    title: 'Designed for store compliance',
-    description:
-      'Shorebird adheres to all store guidelines to ensure your app is always compliant.',
-  },
-];
----
-
-<section
-  id="solution"
-  class="mx-auto flex w-10/12 flex-col items-center py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <div
-    class="mx-auto flex flex-col items-center justify-center gap-2 text-center md:flex-row"
-  >
-    <FlutterLogo className="inline h-6 w-6" />
-    <span class="text-text-1">
-      Built by the same people who built Flutter
-    </span>
-  </div>
-  <Spacer />
-  <h1 class="text-text-1 text-center text-4xl">Deliver instant updates</h1>
-  <Spacer />
-  <h3 class="text-text-2 text-center text-lg">
-    Fix critical issues on your schedule by pushing updates directly to users'
-    devices.
-  </h3>
-  <Spacer className="h-10" />
-  <div class="grid grid-cols-1 gap-6 lg:grid-cols-2">
-    {
-      features.map((feature) => (
-        <Card className="gap-2 pt-0 cursor-pointer border-2 border-border-1">
-          <CardHeader className="p-0">
-            <Image
-              src={feature.image}
-              alt={feature.title}
-              class="w-full rounded-xl object-cover"
-            />
-          </CardHeader>
-          <CardTitle className="flex items-center justify-center">
-            {feature.title}
-          </CardTitle>
-          <CardContent className="text-center">
-            {feature.description}
-          </CardContent>
-        </Card>
-      ))
-    }
-  </div>
-</section>
diff --git a/src/components/home/success-stories-overview.astro b/src/components/home/success-stories-overview.astro
deleted file mode 100644
index 0b256fd0..00000000
--- a/src/components/home/success-stories-overview.astro
+++ /dev/null
@@ -1,73 +0,0 @@
----
-import { ArrowRightIcon } from '@phosphor-icons/react';
-import { Button } from '@/components/ui/button';
-import { Card, CardHeader, CardContent } from '@/components/ui/card';
-import { getCollection } from 'astro:content';
-import { Image } from 'astro:assets';
-import { Spacer } from '@/components/ui/spacer';
-
-const sortByDate = (a: any, b: any) =>
-  new Date(b.data.date).valueOf() - new Date(a.data.date).valueOf();
-const stories = (await getCollection('successStories'))
-  .sort(sortByDate)
-  .slice(0, 2);
-const images = import.meta.glob<{ default: ImageMetadata }>(
-  '/src/assets/success-stories/covers/*.{jpeg,jpg,png,gif}'
-);
-const coverImages = stories.map((story) => {
-  const cover = story.data.cover;
-  if (images[`/src/assets/success-stories/covers/${cover}`]) {
-    return images[`/src/assets/success-stories/covers/${cover}`];
-  }
-  throw new Error(`Cover image for story ${story.data.title} not found`);
-});
----
-
-<section
-  id="success-stories"
-  class="mx-auto flex w-10/12 flex-col items-start py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <h1 class="text-text-1 text-4xl">Success stories</h1>
-  <Spacer />
-  <div
-    class="flex w-full flex-col items-start justify-between gap-6 md:flex-row"
-  >
-    <h3 class="text-text-2 text-lg lg:text-center">
-      See how everyone from small teams to global companies are using Shorebird
-      today.
-    </h3>
-    <a href="/success-stories" class="w-full md:w-auto">
-      <Button variant="outline" className="w-full font-light">
-        View all stories <ArrowRightIcon className="size-5" weight="bold" />
-      </Button>
-    </a>
-  </div>
-  <Spacer className="h-10" />
-  <div class="grid grid-cols-1 gap-6 md:grid-cols-2">
-    {
-      stories.map((post, index) => (
-        <a href={`/success-stories/${post.id}`} class="hover:no-underline">
-          <Card className="gap-2 py-0 cursor-pointer border-2 border-border-1 hover:border-accent-secondary-1">
-            <CardHeader className="p-0">
-              <Image
-                src={coverImages[index]()}
-                alt={`${post.data.title} cover image`}
-                class="w-full rounded-t-xl object-cover"
-              />
-            </CardHeader>
-            <CardContent className="p-4">
-              <div class="flex flex-col gap-3">
-                <h1 class="text-text-1 text-xl hover:underline">
-                  {post.data.title}
-                </h1>
-              </div>
-              <p class="text-text-2 line-clamp-2 text-ellipsis">
-                {post.data.description}
-              </p>
-            </CardContent>
-          </Card>
-        </a>
-      ))
-    }
-  </div>
-</section>
diff --git a/src/components/home/testimonials.astro b/src/components/home/testimonials.astro
index 5ef34844..7756a6c5 100644
--- a/src/components/home/testimonials.astro
+++ b/src/components/home/testimonials.astro
@@ -1,94 +1,187 @@
 ---
-import { Card, CardHeader, CardContent } from '@/components/ui/card';
-import { Image } from 'astro:assets';
-import { Spacer } from '@/components/ui/spacer';
-import JasonRai from '@/assets/testimonials/jason-rai.png';
-import RenanAraujo from '@/assets/testimonials/renan-araujo.png';
-import TahaTesser from '@/assets/testimonials/taha-tesser.png';
-import EsraKadah from '@/assets/testimonials/esra-kadah.png';
-import ScottMacDougall from '@/assets/testimonials/scott-macdougall.jpeg';
-import DavidPaul from '@/assets/testimonials/david-paul.jpg';
+/**
+ * "Testimonials β€” What our customers are saying" (Webflow `.c_slider_reviews`,
+ * a Swiper). Ported as a CSS scroll-snap row that bleeds to the viewport
+ * edges; the prev/next buttons scroll it by one card.
+ *
+ * Cards come from `src/data/reviews.json` (the Webflow "Reviews" CMS
+ * collection). The live homepage shows the reviews that have an avatar,
+ * newest CMS item first.
+ */
+import { CaretLeftIcon, CaretRightIcon } from '@phosphor-icons/react';
+import Section from '@/components/ui/section.astro';
+import reviews from '@/data/reviews.json';
 
-const testimonials = [
-  {
-    name: 'Jason Rai',
-    title: 'Head of Frontend Engineering, Kijiji',
-    quote:
-      "We use Shorebird at Kijiji on Android and it's been awesome. Working well at a very large scale.",
-    image: JasonRai,
-  },
-  {
-    name: 'Renan Araujo',
-    title: 'Senior Engineer, Superlist',
-    quote:
-      'Shorebird was very useful for distributing updates to my Flame game with over 10k players. Works like a charm.',
-    image: RenanAraujo,
-  },
-  {
-    name: 'Taha Tesser',
-    title: 'Engineer, Codemagic',
-    quote:
-      'Shorebird solves one of the biggest challenges: bringing over-the-air updates instantly to your users. Backed by an amazing team.',
-    image: TahaTesser,
-  },
-  {
-    name: 'Esra Kadah',
-    title: 'Senior Mobile App Developer, Antigua Mobile',
-    quote:
-      'With our client’s app dependency on real-time task management, waiting for app store approvals wasn’t an option. Any downtime could lead to lost revenue for their customers. Shorebird’s over-the-air patches saved us multiple times with critical fixes.',
-    image: EsraKadah,
-  },
-  {
-    name: 'Scott MacDougall',
-    title: 'Head of Engineering, Mobile at Kijiji',
-    quote:
-      'Over time, we have realized that we could Shorebird a fix quickly to all of our users, which made an enormous impact on customer satisfaction. That’s now become a default phrase in our development team, as it’s a great tool to have in our toolbox.',
-    image: ScottMacDougall,
-  },
-  {
-    name: 'David Sylvester-Paul',
-    title: 'CTO at EasySpend',
-    quote:
-      'In the past, we often wondered how other highly rated mobile apps updated their features without forcing users to manually download an update from the store. That curiosity led us to Shorebird, and ever since, we have implemented it in all of our applications.',
-    image: DavidPaul,
-  },
-];
+const avatars = import.meta.glob<{ default: ImageMetadata }>(
+  '/src/assets/testimonials/*.{webp,png,jpg,jpeg,avif}',
+  { eager: true },
+);
+const testimonials = reviews
+  .filter((review) => review.avatar)
+  .reverse()
+  .map((review) => {
+    const avatar = avatars[review.avatar!];
+    if (!avatar) throw new Error(`Avatar ${review.avatar} not found`);
+    return { ...review, image: avatar.default };
+  });
 ---
 
-<section
-  id="testimonials"
-  class="mx-auto flex w-10/12 flex-col py-12 lg:py-24 xl:w-10/12 2xl:w-[1280px]"
->
-  <div class="flex flex-col items-center justify-center">
-    <h1 class="text-text-1 text-4xl">Testimonials</h1>
-    <Spacer />
-    <h3 class="text-text-2 text-center text-lg">
-      See what the community has to say about Shorebird.
-    </h3>
-    <Spacer className="h-10" />
-    <div class="grid grid-cols-1 gap-6 lg:grid-cols-3">
+<Section theme="light" id="testimonials" class="overflow-x-clip">
+  <div data-reviews>
+    <div class="grid grid-cols-12 gap-x-column-gap gap-y-row-gap">
+      <div class="col-span-12 lg:col-span-8">
+        <div class="flex h-full flex-col items-start justify-center">
+          <p class="body-s-strong text-brand-secondary pb-text-s">
+            Testimonials
+          </p>
+          <h2 class="title-l pb-text-s">What our customers are saying</h2>
+          <p class="body-m">See what the community has to say about Shorebird.</p>
+        </div>
+      </div>
+      <div class="hidden lg:col-span-4 lg:block">
+        <div class="flex h-full items-end justify-end gap-2">
+          <button
+            type="button"
+            data-reviews-prev
+            aria-label="Previous testimonials"
+            class="reviews-nav"
+          >
+            <CaretLeftIcon size={20} />
+          </button>
+          <button
+            type="button"
+            data-reviews-next
+            aria-label="Next testimonials"
+            class="reviews-nav"
+          >
+            <CaretRightIcon size={20} />
+          </button>
+        </div>
+      </div>
+    </div>
+    <div class="pb-section-xs"></div>
+    <div
+      data-reviews-track
+      class="reviews-track flex snap-x snap-mandatory gap-4 overflow-x-auto pb-[60px] md:gap-10"
+    >
       {
-        testimonials.map((testimonial, index) => {
-          return (
-            <Card>
-              <CardHeader>
-                <div class="flex flex-row items-center gap-2">
-                  <Image
-                    class="size-10 rounded-full"
-                    src={testimonial.image}
-                    alt={testimonial.name}
-                  />
-                  <div class="flex flex-col">
-                    <p>{testimonial.name}</p>
-                    <p class="text-text-2 text-sm">{testimonial.title}</p>
-                  </div>
-                </div>
-              </CardHeader>
-              <CardContent>{testimonial.quote}</CardContent>
-            </Card>
-          );
-        })
+        testimonials.map((review) => (
+          <article class="reviews-card border-border flex shrink-0 snap-start flex-col justify-between rounded-3xl border p-5 md:p-10">
+            <div class="pt-text-xs pb-text-s">
+              <p class="body-m">{review.quote}</p>
+            </div>
+            <div class="flex items-center gap-4">
+              <img
+                src={review.image.src}
+                width={review.image.width}
+                height={review.image.height}
+                alt={review.name}
+                loading="lazy"
+                class="size-10 shrink-0 rounded-full object-cover"
+              />
+              <div class="flex flex-col items-start justify-center">
+                <p class="body-m-strong text-text-1">{review.name}</p>
+                <p class="body-xs">{review.role}</p>
+              </div>
+            </div>
+          </article>
+        ))
       }
     </div>
+    <div class="flex items-end justify-center gap-2 pt-section-xs lg:hidden">
+      <button
+        type="button"
+        data-reviews-prev
+        aria-label="Previous testimonials"
+        class="reviews-nav"
+      >
+        <CaretLeftIcon size={20} />
+      </button>
+      <button
+        type="button"
+        data-reviews-next
+        aria-label="Next testimonials"
+        class="reviews-nav"
+      >
+        <CaretRightIcon size={20} />
+      </button>
+    </div>
   </div>
-</section>
+</Section>
+
+<style>
+  /* Webflow `.swiper.is--c_slider_reviews { overflow: visible }`: the row
+   * bleeds past the container to the viewport edges, but its cards still
+   * line up with the container. */
+  .reviews-track {
+    --bleed: calc(50vw - 50%);
+    margin-inline: calc(-1 * var(--bleed));
+    padding-inline: var(--bleed);
+    /* Same bleed, but percentages here resolve against the scrollport. */
+    scroll-padding-inline: calc(
+      (
+        100% -
+          (min(100%, var(--container-size)) - var(--container-padding) * 2)
+      ) / 2
+    );
+    scrollbar-width: none;
+    scroll-behavior: smooth;
+  }
+  .reviews-track::-webkit-scrollbar {
+    display: none;
+  }
+  /* `.swiper-slide.is--c_slider_reviews`: 3 per view, 77% tablet, 88% mobile. */
+  .reviews-card {
+    width: 88%;
+  }
+  @media (min-width: 768px) {
+    .reviews-card {
+      width: 77%;
+    }
+  }
+  @media (min-width: 992px) {
+    .reviews-card {
+      width: calc(33.3333% - 1.66667rem);
+    }
+  }
+  /* `.swiper-prev` / `.swiper-next` */
+  .reviews-nav {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 2.25rem;
+    height: 2.25rem;
+    border-radius: 9999px;
+    border: 1px solid var(--button-secondary-border);
+    color: var(--text-3);
+    transition:
+      color 0.25s,
+      background-color 0.25s;
+  }
+  .reviews-nav:hover {
+    color: var(--text-1);
+  }
+</style>
+
+<script>
+  document.querySelectorAll<HTMLElement>('[data-reviews]').forEach((root) => {
+    const track = root.querySelector<HTMLElement>('[data-reviews-track]');
+    if (!track) return;
+    const step = () => {
+      const card = track.firstElementChild as HTMLElement | null;
+      if (!card) return track.clientWidth;
+      const gap = parseFloat(getComputedStyle(track).columnGap) || 0;
+      return card.getBoundingClientRect().width + gap;
+    };
+    root.querySelectorAll('[data-reviews-prev]').forEach((button) =>
+      button.addEventListener('click', () =>
+        track.scrollBy({ left: -step(), behavior: 'smooth' }),
+      ),
+    );
+    root.querySelectorAll('[data-reviews-next]').forEach((button) =>
+      button.addEventListener('click', () =>
+        track.scrollBy({ left: step(), behavior: 'smooth' }),
+      ),
+    );
+  });
+</script>
diff --git a/src/components/logos/discord-logo.tsx b/src/components/logos/discord-logo.tsx
index ee0a89e8..49cfd0cb 100644
--- a/src/components/logos/discord-logo.tsx
+++ b/src/components/logos/discord-logo.tsx
@@ -12,7 +12,7 @@ function DiscordLogo({ className }: { className?: string }) {
       <g clipPath="url(#clip0_3111_5056)">
         <path
           d="M16.9419 3.76947C15.6279 3.16787 14.2407 2.74109 12.8158 2.5C12.6208 2.84857 12.4444 3.20721 12.2872 3.57441C10.7694 3.34569 9.22586 3.34569 7.70802 3.57441C7.55081 3.20725 7.37438 2.84862 7.17947 2.5C5.75362 2.74312 4.36551 3.17092 3.05017 3.77261C0.438871 7.63607 -0.26901 11.4036 0.0849306 15.1176C1.61417 16.2475 3.32583 17.1067 5.14549 17.6581C5.55523 17.107 5.91779 16.5224 6.22934 15.9104C5.6376 15.6894 5.06647 15.4167 4.52256 15.0956C4.66571 14.9917 4.80571 14.8848 4.94099 14.781C6.52365 15.5252 8.25105 15.9111 9.99998 15.9111C11.7489 15.9111 13.4763 15.5252 15.059 14.781C15.1958 14.8926 15.3358 14.9996 15.4774 15.0956C14.9324 15.4173 14.3603 15.6905 13.7675 15.912C14.0786 16.5237 14.4412 17.1078 14.8513 17.6581C16.6726 17.109 18.3855 16.2501 19.915 15.1192C20.3303 10.8121 19.2056 7.0792 16.9419 3.76947ZM6.67766 12.8335C5.69135 12.8335 4.8765 11.9384 4.8765 10.8373C4.8765 9.73612 5.66303 8.83318 6.67452 8.83318C7.686 8.83318 8.49456 9.73612 8.47725 10.8373C8.45995 11.9384 7.68285 12.8335 6.67766 12.8335ZM13.3223 12.8335C12.3344 12.8335 11.5227 11.9384 11.5227 10.8373C11.5227 9.73612 12.3092 8.83318 13.3223 8.83318C14.3354 8.83318 15.1376 9.73612 15.1203 10.8373C15.103 11.9384 14.3275 12.8335 13.3223 12.8335Z"
-          fill="#B8B8B7"
+          fill="currentColor"
         />
       </g>
       <defs>
diff --git a/src/components/logos/flutter-logo.tsx b/src/components/logos/flutter-logo.tsx
deleted file mode 100644
index c1f3335a..00000000
--- a/src/components/logos/flutter-logo.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-function FlutterLogo({ className }: { className?: string }) {
-  return (
-    <svg
-      className={className}
-      width="23"
-      height="24"
-      viewBox="0 0 23 24"
-      fill="none"
-      xmlns="http://www.w3.org/2000/svg"
-      xmlnsXlink="http://www.w3.org/1999/xlink"
-    >
-      <path
-        d="M22.1826 9.9545H4.86353V23.4552H22.1826V9.9545Z"
-        fill="url(#pattern0_3053_5369)"
-      />
-      <path
-        d="M19.884 11.0774H12.4995L6.03906 17.5394L9.73056 21.2309L19.884 11.0774Z"
-        fill="#54C5F8"
-      />
-      <path
-        d="M4.19301 15.6931L0.5 12L12.5 0H19.8845L4.19301 15.6931Z"
-        fill="#54C5F8"
-      />
-      <path
-        d="M9.73096 21.231L12.4999 24H19.8844L13.4225 17.5396L9.73096 21.231Z"
-        fill="#01579B"
-      />
-      <path
-        d="M9.73096 21.231L15.2073 19.3353L13.4225 17.5396L9.73096 21.231Z"
-        fill="url(#paint0_linear_3053_5369)"
-      />
-      <path
-        d="M9.73067 13.846L6.03906 17.5376L9.73067 21.2292L13.4222 17.5376L9.73067 13.846Z"
-        fill="#29B6F6"
-      />
-      <defs>
-        <pattern
-          id="pattern0_3053_5369"
-          patternContentUnits="objectBoundingBox"
-          width="1"
-          height="1"
-        >
-          <use xlinkHref="#image0_3053_5369" />
-        </pattern>
-        <linearGradient
-          id="paint0_linear_3053_5369"
-          x1="10.8074"
-          y1="21.9439"
-          x2="13.5575"
-          y2="19.1938"
-          gradientUnits="userSpaceOnUse"
-        >
-          <stop stopColor="#1A237E" stopOpacity="0.4" />
-          <stop offset="1" stopColor="#1A237E" stopOpacity="0" />
-        </linearGradient>
-        <image
-          id="image0_3053_5369"
-          preserveAspectRatio="none"
-          xlinkHref="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABkCAYAAABO6zhfAAAACXBIWXMAAAx0AAAMdAH/P3aRAAAA"
-        />
-      </defs>
-    </svg>
-  );
-}
-
-export { FlutterLogo };
diff --git a/src/components/logos/github-logo.tsx b/src/components/logos/github-logo.tsx
index 7ba060e2..b05cba77 100644
--- a/src/components/logos/github-logo.tsx
+++ b/src/components/logos/github-logo.tsx
@@ -12,7 +12,7 @@ function GitHubLogo({ className }: { className?: string }) {
       <g clipPath="url(#clip0_3111_5161)">
         <path
           d="M10.0003 2.49887e-09C7.62574 -5.30577e-05 5.32862 0.84489 3.52004 2.38363C1.71146 3.92236 0.509455 6.05447 0.129124 8.3984C-0.251207 10.7423 0.214958 13.1451 1.4442 15.1768C2.67344 17.2084 4.58553 18.7364 6.83831 19.4872C7.33831 19.5752 7.52531 19.2752 7.52531 19.0122C7.52531 18.7752 7.51331 17.9872 7.51331 17.1501C5.00029 17.6121 4.35028 16.5371 4.15028 15.9751C3.92842 15.4279 3.57661 14.9429 3.12527 14.5621C2.77527 14.3751 2.27527 13.9121 3.11227 13.9001C3.43216 13.9347 3.73898 14.046 4.00671 14.2244C4.27445 14.4028 4.49522 14.6432 4.65029 14.9251C4.78702 15.1708 4.97089 15.3871 5.19136 15.5616C5.41182 15.7361 5.66456 15.8653 5.93508 15.942C6.2056 16.0186 6.48858 16.0411 6.76781 16.0082C7.04704 15.9753 7.31703 15.8876 7.56231 15.7501C7.60563 15.2415 7.83238 14.766 8.20032 14.4121C5.9753 14.1621 3.65028 13.3001 3.65028 9.47508C3.63611 8.48105 4.00286 7.51927 4.67529 6.78706C4.36959 5.92327 4.40536 4.97533 4.77529 4.13703C4.77529 4.13703 5.61229 3.87503 7.52531 5.16204C9.16161 4.71199 10.8891 4.71199 12.5254 5.16204C14.4374 3.86203 15.2754 4.13703 15.2754 4.13703C15.6454 4.97531 15.6812 5.92328 15.3754 6.78706C16.0498 7.51801 16.4169 8.48063 16.4004 9.47508C16.4004 13.3121 14.0624 14.1621 11.8373 14.4121C12.076 14.654 12.2598 14.9444 12.3763 15.2636C12.4928 15.5829 12.5392 15.9234 12.5124 16.2621C12.5124 17.6001 12.5004 18.6752 12.5004 19.0122C12.5004 19.2752 12.6874 19.5872 13.1874 19.4872C15.436 18.7301 17.3424 17.1985 18.5662 15.1659C19.7901 13.1332 20.2518 10.7318 19.8688 8.39026C19.4859 6.04871 18.2832 3.91946 16.4756 2.3826C14.668 0.845737 12.373 0.00129007 10.0003 2.49887e-09Z"
-          fill="#F0F0EE"
+          fill="currentColor"
         />
       </g>
       <defs>
diff --git a/src/components/logos/linkedin-logo.tsx b/src/components/logos/linkedin-logo.tsx
index 095be16d..1c8a6e8d 100644
--- a/src/components/logos/linkedin-logo.tsx
+++ b/src/components/logos/linkedin-logo.tsx
@@ -13,13 +13,13 @@ function LinkedInLogo({ className }: { className?: string }) {
         fillRule="evenodd"
         clipRule="evenodd"
         d="M4.54075 19.1172V6.21844H0.253441V19.1172H4.54075ZM2.39707 4.45733C3.89214 4.45733 4.8227 3.46685 4.8227 2.22904C4.79484 0.963364 3.89215 0.000366211 2.42544 0.000366211C0.958878 0.000366211 0 0.963364 0 2.22904C0 3.46685 0.930358 4.45733 2.36913 4.45733H2.39707Z"
-        fill="#B8B8B7"
+        fill="currentColor"
       />
       <path
         fillRule="evenodd"
         clipRule="evenodd"
         d="M6.91309 19.1172H11.2003V11.914C11.2003 11.5285 11.2282 11.1434 11.3414 10.8678C11.6514 10.0975 12.3568 9.2998 13.5412 9.2998C15.0925 9.2998 15.7131 10.4827 15.7131 12.2167V19.1172H20V11.7212C20 7.75931 17.8849 5.91576 15.0642 5.91576C12.7513 5.91576 11.736 7.20854 11.1718 8.08909H11.2005V6.21844H6.9132C6.96946 7.42877 6.91309 19.1172 6.91309 19.1172Z"
-        fill="#B8B8B7"
+        fill="currentColor"
       />
     </svg>
   );
diff --git a/src/components/logos/logo-full.tsx b/src/components/logos/logo-full.tsx
index cd3d494c..9eeeca97 100644
--- a/src/components/logos/logo-full.tsx
+++ b/src/components/logos/logo-full.tsx
@@ -1,75 +1,81 @@
+/**
+ * Shorebird logo (bird + wordmark), identical to the live site's nav/footer
+ * SVG. The wordmark uses `currentColor`, so set a text color on the parent
+ * (e.g. `text-text-1`) and a height (`h-6` = the live 24px).
+ */
 function LogoFull({ className }: { className?: string }) {
   return (
     <svg
       className={className}
-      viewBox="0 0 655 140"
+      viewBox="0 0 123 24"
       fill="none"
       xmlns="http://www.w3.org/2000/svg"
+      role="img"
+      aria-label="Shorebird"
     >
-      <title>Shorebird
       
       
       
       
       
       
       
       
       
       
       
       
       
       
         
           
diff --git a/src/components/logos/twitter-logo.tsx b/src/components/logos/twitter-logo.tsx
deleted file mode 100644
index 3a448814..00000000
--- a/src/components/logos/twitter-logo.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-function TwitterLogo({ className }: { className?: string }) {
-  return (
-    
-      Twitter
-      
-    
-  );
-}
-
-export { TwitterLogo };
diff --git a/src/components/newsletter/newsletter-form.tsx b/src/components/newsletter/newsletter-form.tsx
deleted file mode 100644
index 48f76b26..00000000
--- a/src/components/newsletter/newsletter-form.tsx
+++ /dev/null
@@ -1,165 +0,0 @@
-import { useState } from 'react';
-import { Button } from '@/components/ui/button';
-import { Input } from '@/components/ui/input';
-import { ArrowCounterClockwiseIcon } from '@phosphor-icons/react';
-
-const INIT = 'INIT';
-const SUBMITTING = 'SUBMITTING';
-const ERROR = 'ERROR';
-const SUCCESS = 'SUCCESS';
-const formStates = [INIT, SUBMITTING, ERROR, SUCCESS] as const;
-
-export default function NewsletterSignupForm() {
-  const [email, setEmail] = useState('');
-  const [formState, setFormState] = useState<(typeof formStates)[number]>(INIT);
-  const [errorMessage, setErrorMessage] = useState('');
-
-  const resetForm = () => {
-    setEmail('');
-    setFormState(INIT);
-    setErrorMessage('');
-  };
-
-  const hasRecentSubmission = () => {
-    const time = new Date();
-    const timestamp = time.valueOf();
-    const previousTimestamp = localStorage.getItem('loops-form-timestamp');
-
-    if (
-      previousTimestamp &&
-      Number(previousTimestamp) + 60 * 1000 > timestamp
-    ) {
-      setFormState(ERROR);
-      setErrorMessage('Too many signups, please try again in a little while');
-      return true;
-    }
-
-    localStorage.setItem('loops-form-timestamp', timestamp.toString());
-    return false;
-  };
-
-  const handleSubmit = (event: React.FormEvent) => {
-    event.preventDefault();
-
-    if (formState !== INIT) return;
-    if (!isValidEmail(email)) {
-      setFormState(ERROR);
-      setErrorMessage('Please enter a valid email');
-      return;
-    }
-    if (hasRecentSubmission()) return;
-    setFormState(SUBMITTING);
-
-    const formBody = `userGroup=${encodeURIComponent(
-      'newsletter-signup',
-    )}&email=${encodeURIComponent(email)}&mailingLists=`;
-
-    fetch(
-      `https://app.loops.so/api/newsletter-form/clkle380400tojo0nmapdkds7`,
-      {
-        method: 'POST',
-        body: formBody,
-        headers: {
-          'Content-Type': 'application/x-www-form-urlencoded',
-        },
-      },
-    )
-      .then((res: any) => [res.ok, res.json(), res])
-      .then(([ok, dataPromise, res]) => {
-        if (ok) {
-          resetForm();
-          setFormState(SUCCESS);
-        } else {
-          dataPromise.then((data: any) => {
-            setFormState(ERROR);
-            setErrorMessage(data.message || res.statusText);
-            localStorage.setItem('loops-form-timestamp', '');
-          });
-        }
-      })
-      .catch((error) => {
-        setFormState(ERROR);
-        if (error.message === 'Failed to fetch') {
-          setErrorMessage(
-            'Too many signups, please try again in a little while',
-          );
-        } else if (error.message) {
-          setErrorMessage(error.message);
-        }
-        localStorage.setItem('loops-form-timestamp', '');
-      });
-  };
-
-  switch (formState) {
-    case SUCCESS:
-      return (
-        
-

- Thanks, we'll be in touch! -

-
- ); - case ERROR: - return ( -
- - -
- ); - default: - return ( - <> -
- setEmail(e.target.value)} - required={true} - /> - - - - ); - } - - function SignUpFormError() { - return ( -
-

- {errorMessage || 'Oops! Something went wrong, please try again'} -

-
- ); - } - - function BackButton() { - return ( - - ); - } - - function SignUpFormButton() { - return ( - - ); - } -} - -function isValidEmail(email: any) { - return /.+@.+/.test(email); -} diff --git a/src/components/pricing/pricing-calculator.tsx b/src/components/pricing/pricing-calculator.tsx deleted file mode 100644 index 87a04d92..00000000 --- a/src/components/pricing/pricing-calculator.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { Button } from '@/components/ui/button'; -import { Card, CardContent, CardHeader } from '@/components/ui/card'; -import { Slider } from '@/components/ui/slider'; -import { ArrowRightIcon } from '@phosphor-icons/react'; -import React from 'react'; - -const clamp = (n: number, min: number, max: number) => - Math.min(Math.max(n, min), max); - -function PricingCalculator({ hideCTA }: { hideCTA?: boolean }) { - const [activeUsers, setActiveUsers] = React.useState(5000); - - const calculatePrice = () => { - const totalPatches = 1 * activeUsers; // Assume 1 patch per active user - const plan = totalPatches > 5000 ? 'Pro' : 'Free'; - const platformFee = totalPatches > 5000 ? 20 : 0; - const includedPatchInstalls = plan === 'Pro' ? 50000 : 5000; - const overages = clamp( - Math.ceil((totalPatches - includedPatchInstalls) * (1 / 2500)), - 0, - Infinity, - ); - - return { - total: - activeUsers > 2000000 - ? null - : `$${(platformFee + overages).toLocaleString()}`, - }; - }; - const pricing = calculatePrice(); - const monthlyActiveUsers = - activeUsers > 2000000 ? '2,000,000+' : activeUsers.toLocaleString(); - - return ( - - -
-
-

Cost per patch

-

- Estimate the cost to send a patch to your users. -

-
- {!hideCTA && ( - - - - )} -
-
- -
-
-

Users

-

- {monthlyActiveUsers} -

-
-
-

Estimated Cost

-

- {pricing.total ?? 'Contact Us '} -

-
-
-
- setActiveUsers(value as number)} - /> -
-
-

- *Prices are quoted in USD and sold as "patch installs per month", - reflecting successful installs of a given patch. For example, 1 - patch pushed to 10 devices is 10 installs. 2 patches pushed to 5 - devices is also 10 installs. -

-
-
-
- ); -} -export { PricingCalculator }; diff --git a/src/components/pricing/pricing-details.astro b/src/components/pricing/pricing-details.astro index 86a43603..2e2440d3 100644 --- a/src/components/pricing/pricing-details.astro +++ b/src/components/pricing/pricing-details.astro @@ -1,46 +1,27 @@ --- -import config from '@/config'; -import { GradientOutlineButton } from '@/components/ui/button'; -import { PricingCalculator } from '@/components/pricing/pricing-calculator'; +/** + * Pricing page body: the "Pay as you grow" header with the billing toggle + * and plan cards (Webflow `header.g_page--section` + `.c_tabs_pricing`), + * the "Trusted by" logo marquee, then the "Plan comparison" table. + */ +import Brands from '@/components/home/brands.astro'; +import Section from '@/components/ui/section.astro'; import { PricingPlans } from '@/components/pricing/pricing-plans'; -import { PricingFaq } from '@/components/pricing/pricing-faq'; -import { Spacer } from '@/components/ui/spacer'; -import { ArrowRightIcon } from '@phosphor-icons/react'; +import { PricingTable } from '@/components/pricing/pricing-table'; --- -
-
-

- Pay as you grow -

- -

- Deliver instant updates with pricing that scales as you grow. -

- - - - -
-
-
-

FAQ

- - Check out the top frequently asked questions regarding pricing. If - you still have questions, please contact us. - - - - Contact us - - -
-
- -
-
-
+
+ {/* Webflow `is--section_hero_xl`; the live nav overlays the hero. */} +
+
+
-
+
+ +
+
+ +
+
+ +
diff --git a/src/components/pricing/pricing-faq.tsx b/src/components/pricing/pricing-faq.tsx deleted file mode 100644 index 52e68f74..00000000 --- a/src/components/pricing/pricing-faq.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { Markdown } from '@/components/ui/markdown'; -import { - Accordion, - AccordionContent, - AccordionItem, - AccordionTrigger, -} from '@/components/ui/accordion'; - -const faqs = [ - { - question: 'How many patch installs will I use?', - answer: - 'You are only billed for successful patch installs. \ - This occurs when the user opens your app with the new patch installed. \ - A rule of thumb is number of patches per month times number of monthly active users. \ - If you have 1000 MAU and you ship 4 patches per month, you will likely use about 4000 patch installs.', - }, - { - question: 'Do you offer discounts?', - answer: - 'We offer committed use discounts for customers who commit to a certain number of patch installs per month. We offer committed usage discounts starting at 2.5M patches per month.', - }, - { - question: 'How much are your Enterprise plans?', - answer: - 'We offer our enterprise services starting at $2,000 per month. Below that level we recommend our self-service plans.', - }, - { - question: 'Do patch installs expire?', - answer: - 'Yes, patch install credits expire at the end of each billing period, typically one month. We do not offer rollover credits.', - }, - { - question: 'Can I pay annually?', - answer: 'Yes, all paid plans support annual or monthly billing.', - }, - { - question: 'What payment methods do you accept?', - answer: - 'We accept any method of payment Stripe accepts in your region. Enterprise customers can also pay by invoice.', - }, - { - question: 'When am I charged for patch installs?', - answer: - 'At the start of each billing period, you are billed for your pre-paid patches. \ - In the case of a Pro plan, this includes 50,000 pre-paid patch installs. \ - "Overage" patch installs are billed at the end of each billing period. \ - The initial invoice (month 1) will only include the prepaid patches, however successive months will include \ - overage bills as well. For example, if you are using the Pro plan \ - (includes 50,000 pre-paid patches), and you use 100,000 patch installs each month, \ - you will be charged $20 when you sign up, and then $40 at the beginning of month 2 \ - ($20 for the 50,000 overage, and $20 for Month 2\'s Pro plan). \ - You can always check the status of your account and billing at \ - https://console.shorebird.dev/account.', - }, -]; - -function PricingFaq() { - return ( - - {faqs.map((faq, index) => ( - - {faq.question} - - - - - ))} - - ); -} - -export { PricingFaq }; diff --git a/src/components/pricing/pricing-plans.tsx b/src/components/pricing/pricing-plans.tsx index f095acb5..7dd3c40a 100644 --- a/src/components/pricing/pricing-plans.tsx +++ b/src/components/pricing/pricing-plans.tsx @@ -1,404 +1,170 @@ +/** + * Pricing page plan cards + billing toggle (Webflow `.c_toggle--wrap` and + * `.c_tabs_pricing` / `.c_card_pricing`). One React island: the toggle + * flips between the monthly and yearly card sets; the copy and checkout + * links are copied verbatim from the live page. + */ +import { ButtonLink } from '@/components/ui/button'; import config from '@/config'; -import { Card, CardHeader, CardContent } from '@/components/ui/card'; -import { GradientOutlineButton } from '@/components/ui/button'; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from '@/components/ui/table'; -import { ArrowRightIcon, CheckIcon, MinusIcon } from '@phosphor-icons/react'; -import { useState } from 'react'; import { cn } from '@/lib/utils'; +import { useState } from 'react'; -interface Feature { - title: string; - free?: string; - pro?: string; - business?: string; - enterprise?: string; -} - -const monthlyFeatures: Feature[] = [ - { - title: 'Base Cost', - free: '$0/month', - pro: '$20/month', - business: '$400/month', - enterprise: 'Custom', - }, - { - title: 'Included Patch Installs', - free: '5,000', - pro: '50,000', - business: '1,000,000', - enterprise: 'Custom', - }, - { - title: 'Overage Billing', - pro: '$1 per 2,500 installs', - business: '$1 per 2,500 installs', - enterprise: 'Custom', - }, - { - title: 'Unlimited Apps & Releases', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'CI for public repositories', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'CI for private repositories', - pro: '100 build hours', - business: '100 build hours', - enterprise: 'Custom', - }, - { title: 'Console', free: 'βœ“', pro: 'βœ“', business: 'βœ“', enterprise: 'βœ“' }, - { - title: 'Collaboration', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'Patch Rollbacks', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'Signed Patches', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'Usage Notifications', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { title: 'Staging', free: 'βœ“', pro: 'βœ“', business: 'βœ“', enterprise: 'βœ“' }, - { - title: 'Analytics', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'Custom', - }, - { - title: 'Support', - free: 'Community Discord', - pro: 'Semi-Private', - business: 'Private', - enterprise: 'Private', - }, - { - title: 'User Roles', - free: 'Admin, Developer', - pro: 'Admin, Developer', - business: 'Admin, Developer', - enterprise: 'Custom', - }, - { title: 'Invoice Billing', enterprise: 'βœ“' }, - { title: 'SAML', enterprise: 'Custom' }, -]; +type Billing = 'monthly' | 'yearly'; -const yearlyFeatures: Feature[] = [ - { - title: 'Base Cost', - free: '$0/year', - pro: '$240/year', - business: '$4,800/year', - enterprise: 'Custom', - }, - { - title: 'Included Patch Installs', - free: '5,000', - pro: '600,000', - business: '12,000,000', - enterprise: 'Custom', - }, - { - title: 'Overage Billing', - enterprise: 'Custom', - }, - { - title: 'Unlimited Apps & Releases', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'CI for public repositories', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'CI for private repositories', - pro: '1,200 build hours', - business: '1,200 build hours', - enterprise: 'Custom', - }, - { title: 'Console', free: 'βœ“', pro: 'βœ“', business: 'βœ“', enterprise: 'βœ“' }, - { - title: 'Collaboration', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'Patch Rollbacks', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'Signed Patches', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { - title: 'Usage Notifications', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'βœ“', - }, - { title: 'Staging', free: 'βœ“', pro: 'βœ“', business: 'βœ“', enterprise: 'βœ“' }, - { - title: 'Analytics', - free: 'βœ“', - pro: 'βœ“', - business: 'βœ“', - enterprise: 'Custom', - }, - { - title: 'Support', - free: 'Community Discord', - pro: 'Semi-Private', - business: 'Private', - enterprise: 'Private', - }, - { - title: 'User Roles', - free: 'Admin, Developer', - pro: 'Admin, Developer', - business: 'Admin, Developer', - enterprise: 'Custom', - }, - { title: 'Invoice Billing', enterprise: 'βœ“' }, - { title: 'SAML', enterprise: 'Custom' }, -]; +interface Plan { + name: string; + description: string; + price: string; + period?: string; + cta: string; + href: string; + variant: 'primary' | 'secondary'; +} -const monthlyPlans = [ +const monthlyPlans: Plan[] = [ { name: 'Free', - price: '$0', description: 'Made for hobbyists, small apps, and demos.', - cta: { link: config.consoleUrl, title: 'Get started' }, + price: '$0', + period: '/month', + cta: 'Join free', + href: `${config.consoleUrl}/login`, + variant: 'secondary', }, { name: 'Pro', - price: '$20', description: 'Sized for usage from medium sized apps with scalable pricing.', - cta: { link: config.monthlyProPlanCheckoutUrl, title: 'Buy now' }, + price: '$20', + period: '/month', + cta: 'Get started', + href: config.monthlyProPlanCheckoutUrl, + variant: 'primary', }, { name: 'Business', + description: 'Great for teams with large apps and advanced needs.', price: '$400', - description: 'Great for large apps with advanced needs.', - cta: { link: config.monthlyBusinessPlanCheckoutUrl, title: 'Buy now' }, + period: '/month', + cta: 'Get started', + href: config.monthlyBusinessPlanCheckoutUrl, + variant: 'secondary', }, { name: 'Enterprise', - price: 'Custom', description: 'Build a custom plan for enterprise apps & needs.', - cta: { link: config.contactSales, title: 'Talk to sales' }, + price: 'Custom', + cta: 'Talk to sales', + href: config.contactSales, + variant: 'secondary', }, ]; -const yearlyPlans = [ - { - name: 'Free', - price: '$0', - description: 'Made for hobbyists, small apps, and demos.', - cta: { link: config.consoleUrl, title: 'Get started' }, - }, +const yearlyPlans: Plan[] = [ + { ...monthlyPlans[0], period: '/year' }, { - name: 'Pro', + ...monthlyPlans[1], price: '$240', - description: - 'Sized for usage from medium sized apps with scalable pricing.', - cta: { link: config.yearlyProPlanCheckoutUrl, title: 'Buy now' }, + period: '/year', + href: config.yearlyProPlanCheckoutUrl, }, { - name: 'Business', + ...monthlyPlans[2], price: '$4,800', - description: 'Great for large apps with advanced needs.', - cta: { link: config.yearlyBusinessPlanCheckoutUrl, title: 'Buy now' }, - }, - { - name: 'Enterprise', - price: 'Custom', - description: 'Build a custom plan for enterprise apps & needs.', - cta: { link: config.contactSales, title: 'Talk to sales' }, + period: '/year', + href: config.yearlyBusinessPlanCheckoutUrl, }, + monthlyPlans[3], ]; -const pricingConfig = { - monthly: { - plans: monthlyPlans, - features: monthlyFeatures, - }, - yearly: { - plans: yearlyPlans, - features: yearlyFeatures, - }, -}; - -function PricingPlans({ includeTable }: { includeTable?: boolean }) { - const [isAnnual, setIsAnnual] = useState(false); - const plans = isAnnual - ? pricingConfig.yearly.plans - : pricingConfig.monthly.plans; +function BillingToggle({ + value, + onChange, +}: { + value: Billing; + onChange: (value: Billing) => void; +}) { + const options: Billing[] = ['monthly', 'yearly']; return ( - <> -
- +
+
+ ); +} + +function PlanCard({ plan }: { plan: Plan }) { + return ( +
+

{plan.name}

+

{plan.description}

+
+
+

{plan.price}

+ {plan.period &&

{plan.period}

}
-
-
- {plans.map((plan) => { - const isEnterprise = plan.name === 'Enterprise'; - return ( - - -
-

{plan.name}

-

{plan.description}

-
-
-
- -

- {plan.price}{' '} - {!isEnterprise ? ( - - /{isAnnual ? 'year' : 'month'} - - ) : null} -

- - - {plan.cta.title}{' '} - - - -
-
- ); - })} +
+ + {plan.cta} +
- {includeTable && } - +
); } -function PricingTable({ isAnnual }: { isAnnual: boolean }) { - const { plans, features } = isAnnual - ? pricingConfig.yearly - : pricingConfig.monthly; +/** + * Header row of the pricing page: title + subtitle on the left, toggle on + * the right (stacked on mobile), then the four plan cards. + */ +function PricingPlans() { + const [billing, setBilling] = useState('monthly'); + const plans = billing === 'yearly' ? yearlyPlans : monthlyPlans; return ( -
- - - - - PLAN COMPARISON - - {plans.map((plan) => ( - - {plan.name} - - ))} - - - - {features.map((feature) => ( - - {feature.title} - {plans.map((plan) => ( - - {feature[plan.name.toLowerCase() as keyof Feature] ? ( - feature[plan.name.toLowerCase() as keyof Feature] === - 'βœ“' ? ( - - ) : ( - feature[plan.name.toLowerCase() as keyof Feature] - ) - ) : ( - - )} - - ))} - - ))} - -
-
+ <> +
+
+

Pay as you grow

+

+ Deliver instant updates with pricing that scales as you grow. +

+
+ +
+
+
+ {plans.map((plan) => ( + + ))} +
+ ); } + export { PricingPlans }; diff --git a/src/components/pricing/pricing-table.tsx b/src/components/pricing/pricing-table.tsx new file mode 100644 index 00000000..6024d97b --- /dev/null +++ b/src/components/pricing/pricing-table.tsx @@ -0,0 +1,215 @@ +/** + * "Plan comparison" table (Webflow `.c_pricing_table`). Desktop renders a + * five-column grid (feature + four plans). Below `md` the live page shows a + * single plan column picked from a dropdown, with the feature name on the + * left of each row β€” same here, via a small React state. + */ +import { cn } from '@/lib/utils'; +import { useEffect, useRef, useState } from 'react'; + +const plans = ['Free', 'Pro', 'Business', 'Enterprise'] as const; +type PlanName = (typeof plans)[number]; + +/** `true` renders the blue check; a string renders as-is (`'-'` is muted). */ +type Cell = true | string; + +interface Row { + title: string; + cells: [Cell, Cell, Cell, Cell]; +} + +const rows: Row[] = [ + { + title: 'Monthly patch installs', + cells: ['5,000', '50,000', '1,000,000', 'Custom'], + }, + { + title: 'Overage billing', + cells: ['-', '$1 per 2,500 installs', '$1 per 2,500 installs', 'Custom'], + }, + { title: 'Unlimited apps & releases', cells: [true, true, true, true] }, + { title: 'Console', cells: [true, true, true, true] }, + { title: 'Collaboration', cells: ['-', true, true, true] }, + { title: 'Patch rollbacks', cells: [true, true, true, true] }, + { title: 'Signed patches', cells: [true, true, true, true] }, + { title: 'Usage notifications', cells: [true, true, true, true] }, + { title: 'Staging', cells: [true, true, true, true] }, + { title: 'Analytics', cells: [true, true, true, 'Custom'] }, + { + title: 'Support', + cells: [ + 'Community Discord', + 'Email based', + 'Private Discord', + 'Private Discord/Slack', + ], + }, + { + title: 'User roles', + cells: ['-', 'Admin, Developer', '+Viewer', '+App Manager'], + }, + { title: 'Invoice billing', cells: ['-', '-', '-', true] }, + { title: 'SAML', cells: ['-', '-', '-', true] }, + { title: 'Audit logs', cells: ['-', '-', '-', true] }, +]; + +function CheckIcon() { + return ( + + + + ); +} + +function CellValue({ value }: { value: Cell }) { + if (value === true) return ; + return ( +

+ {value} +

+ ); +} + +function PlanDropdown({ + value, + onChange, +}: { + value: PlanName; + onChange: (plan: PlanName) => void; +}) { + const [open, setOpen] = useState(false); + const ref = useRef(null); + + useEffect(() => { + if (!open) return; + const onPointerDown = (event: PointerEvent) => { + if (!ref.current?.contains(event.target as Node)) setOpen(false); + }; + document.addEventListener('pointerdown', onPointerDown); + return () => document.removeEventListener('pointerdown', onPointerDown); + }, [open]); + + return ( +
+ + {open && ( +
    + {plans.map((plan) => ( +
  • + +
  • + ))} +
+ )} +
+ ); +} + +function PricingTable() { + const [selected, setSelected] = useState('Free'); + const selectedIndex = plans.indexOf(selected); + + return ( +
+ {/* Header row. */} +
+
+

Plan comparison

+
+
+ +
+ {plans.map((plan) => ( +
+

{plan}

+
+ ))} +
+ {rows.map((row) => ( +
+ {/* Mobile: feature name + the selected plan's value in one row. */} +
+

{row.title}

+ +
+ {/* Desktop: full row. */} +
+

{row.title}

+
+ {row.cells.map((cell, i) => ( +
+ +
+ ))} +
+ ))} +
+ ); +} + +export { PricingTable }; diff --git a/src/components/product/benefits.astro b/src/components/product/benefits.astro new file mode 100644 index 00000000..de59055d --- /dev/null +++ b/src/components/product/benefits.astro @@ -0,0 +1,79 @@ +--- +/** + * "Benefits β€” Shipping updates, made simple" (Webflow `.c_grid_3cols` of + * six `.c_card_s`), followed by the PushPress pull quote + * (`.c_unique_review`). + */ +import { + CircleDashedIcon, + ListChecksIcon, + PlanetIcon, + RewindIcon, + TimerIcon, + WrenchIcon, +} from '@phosphor-icons/react'; +import Section from '@/components/ui/section.astro'; +import pushpress from '@/assets/product/pushpress.svg'; + +const benefits = [ + { icon: WrenchIcon, title: 'Push critical updates instantly' }, + { icon: TimerIcon, title: 'Update apps for all users' }, + { icon: RewindIcon, title: 'Rollback changes with impact' }, + { icon: PlanetIcon, title: 'Deploy patches without delays' }, + { icon: ListChecksIcon, title: 'Stay compliant' }, + { icon: CircleDashedIcon, title: 'Phase out support' }, +]; +--- + +
+
+ +
+

Benefits

+

Shipping updates, made simple

+
+
+
+
+ { + benefits.map((benefit) => ( +
+ + + +

{benefit.title}

+
+ )) + } +
+
+
+ +
+ PushPress +

+ Our speed to release updates has skyrocketed. It used to take four days + to two weeks depending on urgency. Now it’s way faster. The reliability + of shipping fixes is night and day. +

+
+

Allan Wright

+

,

+

Senior Mobile Developer

+
+
+
+
diff --git a/src/components/product/code-push-motion.tsx b/src/components/product/code-push-motion.tsx new file mode 100644 index 00000000..fff568b0 --- /dev/null +++ b/src/components/product/code-push-motion.tsx @@ -0,0 +1,54 @@ +import codePushMotion from '@/motion/code-push-motion.json'; +import { useLottie } from 'lottie-react'; +import { useEffect, useRef } from 'react'; + +/** + * The Code Push product hero Lottie ("Bug Fixed" globe, phone + code diff) + * exported from Webflow (`696120564c84e6906b44d2eb_code-push.json`). + * `src/motion/code-push-motion.json` is that file with its single bitmap β€” the + * halftone-dot world map behind the phone β€” downscaled from 2048px to 512px + * and re-encoded. Every visible pixel of that PNG is white; the map is carried + * entirely by its alpha channel, and the export left undefined RGB noise under + * the transparent pixels, so flattening the RGB to white halved the file + * (144kB -> 72kB) for a pixel-identical render. Don't downscale it further: + * the dots are real detail, not a gradient, and 512px is already soft. + * It is 1200x565 like the homepage animation; the parent reserves that aspect + * ratio so nothing shifts while the island hydrates. + */ +function CodePushMotion() { + const ref = useRef(null); + const options = { + animationData: codePushMotion, + loop: true, + autoplay: true, + rendererSettings: { preserveAspectRatio: 'xMidYMax meet' }, + }; + const { View, pause, play } = useLottie(options, { + width: '100%', + height: '100%', + }); + + useEffect(() => { + if (!ref.current) return; + const observer = new IntersectionObserver( + ([entry]) => { + if (entry.isIntersecting) { + play(); + } else { + pause(); + } + }, + { threshold: 0.25 }, + ); + observer.observe(ref.current!); + return () => observer.disconnect(); + }, [ref, play, pause]); + + return ( +
+ {View} +
+ ); +} + +export { CodePushMotion }; diff --git a/src/components/product/customers.astro b/src/components/product/customers.astro new file mode 100644 index 00000000..51469c9f --- /dev/null +++ b/src/components/product/customers.astro @@ -0,0 +1,36 @@ +--- +/** + * "Customers stories β€” View our customers using Code Push" (Webflow + * `.c_card--list`): three success-story cards from the content collection. + */ +import { getCollection } from 'astro:content'; +import Section from '@/components/ui/section.astro'; +import StoryCard from '@/components/success-stories/story-card.astro'; + +export interface Props { + eyebrow: string; + title: string; + /** Success-story slugs to show, in order. */ + stories: string[]; +} + +const { eyebrow, title, stories: slugs } = Astro.props; + +const all = await getCollection('successStories'); +const stories = slugs.map((slug) => { + const story = all.find((entry) => entry.id === slug); + if (!story) throw new Error(`Success story ${slug} not found`); + return story; +}); +--- + +
+
+

{eyebrow}

+

{title}

+
+
+
+ {stories.map((story) => )} +
+
diff --git a/src/components/product/demo.astro b/src/components/product/demo.astro new file mode 100644 index 00000000..81c63dd5 --- /dev/null +++ b/src/components/product/demo.astro @@ -0,0 +1,74 @@ +--- +/** + * "Experience our demo β€” How it works": the dark `.c_card_demo--xl` card + * inside a light band, framed by the purple radial + blurred glass + * (`.c_card_demo_frame`) with the Arcade walkthrough embedded in it. + */ +import Section from '@/components/ui/section.astro'; + +export interface Props { + eyebrow: string; + title: string; + description: string; + /** Arcade embed URL (`https://demo.arcade.software/?embed…`). */ + src: string; + iframeTitle: string; +} + +const { eyebrow, title, description, src, iframeTitle } = Astro.props; +--- + +
+
+
+
+ +
+

{eyebrow}

+

{title}

+

{description}

+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ + diff --git a/src/components/product/guide-form.tsx b/src/components/product/guide-form.tsx new file mode 100644 index 00000000..6a8104de --- /dev/null +++ b/src/components/product/guide-form.tsx @@ -0,0 +1,134 @@ +import { useState } from 'react'; + +/** + * The Code Push guide download form (Webflow `#email-form` on + * `/code-push-guide`). Posts first/last name + email to the Loops newsletter + * endpoint with `source=ebook-CP-guide` / `userGroup=web-download`, then + * swaps to the "Thank you" state with the PDF download link, like the + * Webflow `.w-form-done` block. + */ +const LOOPS_ENDPOINT = + 'https://app.loops.so/api/newsletter-form/clkle380400tojo0nmapdkds7'; +const GUIDE_PDF = '/guides/shorebird-code-push-guide.pdf'; + +type FormState = 'idle' | 'submitting' | 'done' | 'error'; + +const inputClass = + 'h-11 w-full max-w-[280px] rounded-[10px] border border-[#ccc] bg-white px-3 text-sm text-[#333] placeholder:text-[#757575] focus:border-[#816aa8] focus:outline-none'; +const buttonClass = + 'flex h-11 w-full max-w-[280px] cursor-pointer items-center justify-center rounded-[10px] bg-[#816aa8] px-4 text-lg font-medium text-white transition-colors hover:bg-[#6f5a93] hover:text-white hover:no-underline disabled:opacity-60'; + +function GuideForm() { + const [state, setState] = useState('idle'); + + const handleSubmit = (event: React.FormEvent) => { + event.preventDefault(); + if (state === 'submitting') return; + const form = event.currentTarget; + const data = new FormData(form); + // Honeypot: Webflow's hidden "country" field. + if (data.get('country')) return; + setState('submitting'); + const body = new URLSearchParams(); + for (const key of ['firstName', 'lastName', 'email']) { + body.set(key, String(data.get(key) ?? '')); + } + body.set('source', 'ebook-CP-guide'); + body.set('userGroup', 'web-download'); + fetch(LOOPS_ENDPOINT, { + method: 'POST', + body: body.toString(), + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + }) + .then((res) => { + if (!res.ok) throw new Error(res.statusText); + setState('done'); + }) + .catch(() => setState('error')); + }; + + if (state === 'done') { + return ( +
+

+ Thank you! Download the guide below and we've also emailed you a + link. +

+ + Download the guide + +
+ ); + } + + return ( +
+ {/* Webflow marked "Last name" required and "First name" optional, which + is backwards for the many people who have one name or whose family + name comes first. Loops only needs the email; we ask for the name it + greets people by. */} + + + + + + {state === 'error' && ( +

+ Oops! Something went wrong while submitting the form. +

+ )} +
+ ); +} + +export { GuideForm }; diff --git a/src/components/product/hero.astro b/src/components/product/hero.astro new file mode 100644 index 00000000..92f41c74 --- /dev/null +++ b/src/components/product/hero.astro @@ -0,0 +1,69 @@ +--- +/** + * Product page hero (Webflow `header.g_page--section` + `.c_hero_content`), + * same bones as the homepage hero: centered title/subtitle/buttons, then the + * purple illustration card (`.c_hero_lottie`) holding whatever is slotted in + * (a Lottie island), then the "Trusted by" logo marquee. On tablet/mobile the + * illustration moves above the title. + */ +import { ButtonLink } from '@/components/ui/button'; +import Section from '@/components/ui/section.astro'; +import Brands from '@/components/home/brands.astro'; +import heroBackground from '@/assets/home/hero-background.webp'; + +export interface Props { + title: string; + description: string; + primaryLabel: string; + primaryHref: string; + secondaryLabel: string; + secondaryHref: string; +} + +const { + title, + description, + primaryLabel, + primaryHref, + secondaryLabel, + secondaryHref, +} = Astro.props; +--- + +
+ {/* Webflow `is--section_hero_xl`. The live nav overlays the hero (out of + flow) whereas ours is in flow, so subtract its height. */} +
+
+
+ +
+

{title}

+

{description}

+
+ + {primaryLabel} + + + {secondaryLabel} + +
+
+
+
+
+ +
+
+
+
+ +
+
diff --git a/src/components/product/overview.astro b/src/components/product/overview.astro new file mode 100644 index 00000000..139d683b --- /dev/null +++ b/src/components/product/overview.astro @@ -0,0 +1,79 @@ +--- +/** + * "Code Push Overview β€” Finally a way to deliver instant updates" + * (Webflow `.c_grid_card--l` of four `.c_card_l`). + */ +import { Image } from 'astro:assets'; +import Section from '@/components/ui/section.astro'; +import productivity1 from '@/assets/product/productivity-1.webp'; +import productivity2 from '@/assets/product/productivity-2.webp'; +import productivity3 from '@/assets/product/productivity-3.webp'; +import productivity4 from '@/assets/product/productivity-4.webp'; + +const cards = [ + { + title: 'Works everywhere Flutter does', + description: + 'Shorebird allows you to push updates everywhere your users are.', + image: productivity1, + alt: 'Shorebird pushing updates to Windows, Android, iOS and Linux', + }, + { + title: 'Change any Dart code', + description: 'Setup Shorebird in minutes and push updates to any Dart code.', + image: productivity2, + alt: 'A Dart code diff replacing BrokenView with FixedView', + }, + { + title: 'Rollback changes with no impact', + description: + 'Roll changes back instead of rushing the next build through the release process.', + image: productivity3, + alt: 'Rolling back a release to the previous good version', + }, + { + title: 'Designed for store compliance', + description: + 'Shorebird adheres to all store guidelines to ensure your app is always compliant.', + image: productivity4, + alt: 'Open source shield with 1,200 contributions', + }, +]; +--- + +
+
+ +
+

+ Code Push Overview +

+

Finally a way to deliver instant updates

+

Don’t let app store review times kill your productivity

+
+
+
+
+ { + cards.map((card) => ( +
+
+

{card.title}

+

{card.description}

+
+
+ {card.alt} +
+
+ )) + } +
+
diff --git a/src/components/product/pricing-overview.astro b/src/components/product/pricing-overview.astro new file mode 100644 index 00000000..ec600312 --- /dev/null +++ b/src/components/product/pricing-overview.astro @@ -0,0 +1,89 @@ +--- +/** + * "Pricing β€” Pay as you grow" (Webflow `.c_card_pricing` x4): the yearly + * plan summary on the product page, linking to the full pricing page. + */ +import { ButtonLink } from '@/components/ui/button'; +import Section from '@/components/ui/section.astro'; +import config from '@/config'; + +const plans = [ + { + name: 'Free', + description: 'Made for hobbyists, small apps, and demos.', + price: '$0', + period: '/year', + cta: 'Join free', + href: `${config.consoleUrl}/login`, + variant: 'secondary' as const, + }, + { + name: 'Pro', + description: 'Sized for usage from medium sized apps with scalable pricing.', + price: '$240', + period: '/year', + cta: 'Get started', + href: `${config.consoleUrl}/login`, + variant: 'primary' as const, + }, + { + name: 'Business', + description: 'Great for large apps with advanced needs.', + price: '$4,800', + period: '/year', + cta: 'Get started', + href: `${config.consoleUrl}/login`, + variant: 'secondary' as const, + }, + { + name: 'Enterprise', + description: 'Build a custom plan for enterprise apps & needs.', + price: 'Custom', + cta: 'Talk to sales', + href: config.contactSales, + variant: 'secondary' as const, + }, +]; +--- + +
+
+
+

Pricing

+

Pay as you grow

+
+ +
+
+
+ { + plans.map((plan) => ( +
+

{plan.name}

+

{plan.description}

+
+
+

{plan.price}

+ {plan.period &&

{plan.period}

} +
+
+ + {plan.cta} + +
+
+ )) + } +
+
+ + View full pricing + +
+
diff --git a/src/components/scroll-to-top-button.tsx b/src/components/scroll-to-top-button.tsx deleted file mode 100644 index f3cf1bd3..00000000 --- a/src/components/scroll-to-top-button.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { Button } from '@/components/ui/button'; -import { CaretUpIcon } from '@phosphor-icons/react'; -import { useEffect, useState } from 'react'; - -function ScrollToTopButton() { - const [isVisible, setIsVisible] = useState(false); - - useEffect(() => { - window.addEventListener('scroll', toggleVisible); - }, []); - - const toggleVisible = () => { - const scrolled = document.documentElement.scrollTop; - if (scrolled > 300) { - setIsVisible(true); - } else if (scrolled <= 300) { - setIsVisible(false); - } - }; - - const scrollToTop = () => { - window.scrollTo({ - top: 0, - behavior: 'smooth', - }); - }; - - return ( - <> - {isVisible && ( - - )} - - ); -} - -export { ScrollToTopButton }; diff --git a/src/components/success-stories/story-card.astro b/src/components/success-stories/story-card.astro new file mode 100644 index 00000000..30792a6c --- /dev/null +++ b/src/components/success-stories/story-card.astro @@ -0,0 +1,42 @@ +--- +/** + * Success-story card (Webflow `.c_card--cms_item`): the cover at its natural + * aspect ratio in a rounded frame, the customer name, and the one-line + * summary. Used by the success-stories index and the product pages' + * "Customers stories" grid. + */ +import { Image } from 'astro:assets'; +import { coverFor, type SuccessStory } from '@/lib/success-stories'; + +export interface Props { + story: SuccessStory; + /** `sizes` for the responsive cover; defaults to a 3-up grid. */ + sizes?: string; + /** Element to use for the name (`h2` on the index, `p` elsewhere). */ + headingAs?: 'h2' | 'h3' | 'p'; +} + +const { + story, + sizes = '(max-width: 767px) 100vw, (max-width: 991px) 95vw, 390px', + headingAs: Heading = 'h2', +} = Astro.props; +--- + + +
+ {story.data.title} +
+
+ {story.data.title} +

{story.data.description}

+
diff --git a/src/components/ui/accordion.tsx b/src/components/ui/accordion.tsx deleted file mode 100644 index 02f5fc7e..00000000 --- a/src/components/ui/accordion.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import * as AccordionPrimitive from '@radix-ui/react-accordion'; -import { ChevronDownIcon } from 'lucide-react'; -import * as React from 'react'; - -import { cn } from '@/lib/utils'; - -function Accordion({ - ...props -}: React.ComponentProps) { - return ; -} - -function AccordionItem({ - className, - ...props -}: React.ComponentProps) { - return ( - - ); -} - -function AccordionTrigger({ - className, - children, - ...props -}: React.ComponentProps) { - return ( - - svg]:rotate-180', - className, - )} - {...props} - > - {children} - - - - ); -} - -function AccordionContent({ - className, - children, - ...props -}: React.ComponentProps) { - return ( - -
{children}
-
- ); -} - -export { Accordion, AccordionContent, AccordionItem, AccordionTrigger }; diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index b0a68641..acf20fde 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -4,49 +4,100 @@ import * as React from 'react'; import { cn } from '@/lib/utils'; +/** + * Button variants ported from the Webflow design system: + * + * - `primary` β†’ `.g_button_primary` (gradient pill, white text; hover + * fades the darker gradient stop in over the whole button) + * - `secondary` β†’ `.g_button_secondary` (1.5px inset-border pill on the + * current surface; `outline` is kept as an alias) + * - `tertiary` β†’ plain text link in `--button-tertiary-text`, pair with + * `` or `trailing="arrow"` + * + * Sizes: `default` (1rem / 1.375rem padding) and `small` + * (`data-wf--button-*--variant="small"`). The old shadcn sizes `sm`, `lg` + * and `icon` are still accepted for pre-port callers. + */ const buttonVariants = cva( - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + "relative isolate inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-full font-semibold transition-[color,background-color,box-shadow] duration-300 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50", { variants: { variant: { - default: 'bg-primary text-button-primary-text shadow-xs', - outline: - 'text-button-primary-text border border-input border-border-1 rounded-full bg-background hover:shadow-xs hover:bg-foreground/10 hover:border-foreground/40', + primary: + 'overflow-hidden bg-linear-to-r from-button-primary-1 to-button-primary-2 text-button-primary-text hover:text-button-primary-text after:pointer-events-none after:absolute after:inset-0 after:-z-10 after:bg-button-primary-2 after:opacity-0 after:transition-opacity after:duration-300 hover:after:opacity-100', secondary: - 'bg-secondary text-button-secondary-text shadow-xs hover:bg-secondary/80', - ghost: 'text-button-primary-text', - link: 'text-primary underline-offset-4 hover:underline', + 'bg-transparent text-button-secondary-text shadow-[inset_0_0_0_1.5px_var(--button-secondary-border)] hover:bg-button-secondary-surface-hover hover:text-button-secondary-text hover:shadow-[0_2px_8px_-8px_rgba(0,0,0,0.8),inset_0_0_0_1.5px_var(--button-secondary-border)]', + tertiary: + 'h-auto rounded-none bg-transparent p-0 text-button-tertiary-text hover:text-button-tertiary-text hover:underline hover:underline-offset-4', + /* Legacy aliases. */ + default: + 'overflow-hidden bg-linear-to-r from-button-primary-1 to-button-primary-2 text-button-primary-text hover:text-button-primary-text after:pointer-events-none after:absolute after:inset-0 after:-z-10 after:bg-button-primary-2 after:opacity-0 after:transition-opacity after:duration-300 hover:after:opacity-100', + outline: + 'bg-transparent text-button-secondary-text shadow-[inset_0_0_0_1.5px_var(--button-secondary-border)] hover:bg-button-secondary-surface-hover hover:text-button-secondary-text hover:shadow-[0_2px_8px_-8px_rgba(0,0,0,0.8),inset_0_0_0_1.5px_var(--button-secondary-border)]', + ghost: 'bg-transparent text-text-1 hover:bg-border-1 hover:text-text-1', + link: 'h-auto rounded-none bg-transparent p-0 text-text-1 underline-offset-4 hover:underline', }, size: { - default: 'h-12 px-4 py-2', - sm: 'h-10 rounded-full gap-1.5 px-3', - lg: 'h-15 rounded-md px-6 has-[>svg]:px-4', - icon: 'size-12 rounded-full p-1', + default: 'px-[1.375rem] py-4 text-button-m', + small: 'px-5 py-3 text-button-s', + /* Legacy sizes. */ + sm: 'h-10 px-4 text-button-s', + lg: 'px-7 py-5 text-button-m', + icon: 'size-10 p-0', }, }, + compoundVariants: [ + { variant: ['tertiary', 'link'], className: 'h-auto p-0' }, + ], defaultVariants: { - variant: 'default', + variant: 'primary', size: 'default', }, }, ); -function GradientOutlineButton({ - className, - children, -}: React.PropsWithChildren<{ className?: string }>) { +/** + * The small "live" dot used by "View our Demo ●" (`.c_button--indicator`). + */ +function ButtonIndicator({ className }: { className?: string }) { + return ( +