feat: convert site to astro via codex

This commit is contained in:
2026-06-08 11:17:39 -07:00
parent f3d3562cec
commit 33e78ff8a5
355 changed files with 19954 additions and 6 deletions
+1
View File
@@ -0,0 +1 @@
PUBLIC_AIA_API_BASE=https://api.azinstitute4autism.com
+8
View File
@@ -0,0 +1,8 @@
node_modules/
dist/
.astro/
.env
.env.*
!.env.example
reports/live-crawl.json
reports/*.png
+344
View File
@@ -0,0 +1,344 @@
# Arizona Institute for Autism Astro Site
Static Astro + TypeScript migration of the public Arizona Institute for Autism
website. The read-only source mirror is located at
`../www.azinstitute4autism.com`.
## Quick Start
Run commands from this directory:
```sh
cd www
npm install
npm run dev
```
Astro prints the local development URL, normally:
```txt
http://localhost:4321
```
The development server watches source files and refreshes the browser after
edits. Stop it with `Ctrl+C`.
Do **not** run `npm run extract` during normal editing. Extraction regenerates
migrated Markdown from the raw mirror and can overwrite editorial changes.
## Environment Setup
Requirements:
- Node.js 20.19 or newer; the Nix shell currently supplies Node.js 22
- npm
This repository also has a Nix development shell at the repository root:
```sh
cd ..
nix --extra-experimental-features "nix-command flakes" develop
cd www
npm install
```
Copy the example environment file when testing the like/view counter:
```sh
cp .env.example .env
```
The default value is:
```txt
PUBLIC_AIA_API_BASE=https://api.azinstitute4autism.com
```
The site still renders when that API is unavailable.
## View And Build
### Development Server
Use this while editing:
```sh
npm run dev
```
Useful development URLs include:
```txt
/
/aba-therapy
/autism-evaluations
/learner-social-club
/client-consultation
/library
/es
/es/library
/ar
/ar/library
```
### Production Build
Generate the static production site:
```sh
npm run build
```
The autonomous Codex sandbox denies `/etc/hosts`, so its Node runtime cannot
resolve `localhost`. Use this equivalent validation command only inside that
sandbox:
```sh
npm run build:sandbox
```
Build output is written to:
```txt
dist/
```
### Preview Production Output
After a successful build:
```sh
npm run preview
```
Astro prints the preview URL, normally `http://localhost:4321`.
### Validate Before Committing
```sh
npm run build
npm run audit:links
```
The link audit reads `dist/` after a successful build. If rendered output is
unavailable, it audits generated source routes, relative and root-relative
Markdown links, and public assets instead. It writes:
```txt
reports/broken-links.md
```
## Editing Content
Normal content editing happens in Markdown:
```txt
src/content/pages/en
src/content/pages/es
src/content/pages/ar
src/content/blog/en
src/content/blog/es
src/content/blog/ar
src/content/authors/en
src/content/authors/es
src/content/authors/ar
```
Page and post frontmatter is validated by `src/content.config.ts`.
Example:
```md
---
title: "Example Article"
description: "Short search and social description."
slug: "example-article"
canonical: "https://www.azinstitute4autism.com/library/example-article"
lang: "en"
translationKey: "example-article"
featuredImage: "/assets/images/example.webp"
alt: "Descriptive image alt text"
date: "2026-06-07"
author: "rula-diab"
category: "Library"
tags:
- ABA Therapy
draft: false
---
Article content goes here.
```
Set `draft: true` while preparing unpublished content.
### Front Matter CMS
The project includes `frontmatter.json` for the Front Matter CMS VS Code
extension. Open the `www` folder as the editor workspace so its content folders
and media paths resolve correctly.
### Images And Downloads
Store content-referenced assets in:
```txt
public/assets/images
public/assets/downloads
public/assets/media
```
Reference public assets from Markdown using root-relative paths:
```md
![Descriptive alt text](/assets/images/example.webp)
```
Use `src/assets/images` for images imported directly by Astro components and
processed by Astro.
### Components And Styling
Reusable page sections are in:
```txt
src/components
src/layouts
```
Global styles and design tokens are in:
```txt
src/styles/variables.css
src/styles/global.css
src/styles/rtl.css
```
Navigation, services, redirects, and site details are in:
```txt
src/data
```
## Adding Content
### Add An English Blog Post
1. Create `src/content/blog/en/post-slug.md`.
2. Add valid frontmatter and article Markdown.
3. Place referenced images in `public/assets/images`.
4. Run `npm run dev` and view `/library/post-slug`.
5. Run the production validation commands before committing.
### Add A Translation
Use the same `translationKey` across translated entries:
```txt
src/content/blog/en/post-slug.md
src/content/blog/es/post-slug.md
src/content/blog/ar/post-slug.md
```
The URLs become:
```txt
/library/post-slug
/es/library/post-slug
/ar/library/post-slug
```
Arabic routes automatically render with `lang="ar"` and `dir="rtl"`.
Do not publish unreviewed machine translations. Clearly mark placeholders.
## Mirror Extraction Workflow
The mirror is read-only source material. Never modify:
```txt
../www.azinstitute4autism.com
```
Only rerun extraction when intentionally refreshing migrated content from the
mirror. Commit or back up editorial changes first.
Dependency-free extraction:
```sh
npm run extract
```
Full Cheerio/Turndown extraction:
```sh
npm run extract:full
```
After extraction:
```sh
npm run generate:sitemap
npm run generate:redirects
npm run build
npm run audit:links
```
Extraction regenerates content files, copied assets, and inventories. Review
the complete Git diff before accepting it.
## Reports And Utilities
Migration reports are stored in `reports/`.
Useful commands:
```sh
npm run crawl:live
npm run generate:sitemap
npm run generate:redirects
npm run audit:links
```
The live crawl is optional and may fail in restricted network environments.
## Forms
Forms are intentionally static and do not submit anywhere. Before production:
1. Select a form backend.
2. Connect the forms.
3. Add spam protection.
4. Test validation, confirmation, and failure states.
## Troubleshooting
### `astro: command not found`
Dependencies are not installed:
```sh
npm install
```
### npm TLS or certificate errors
Do not disable npm certificate verification. Run `npm install` from a normal
host terminal or trusted development environment with working CA certificates.
### Link audit says build output is unavailable
Build first:
```sh
npm run build
npm run audit:links
```
### A content page is missing
Check:
- its Markdown file is in the correct language/content folder
- `draft` is `false`
- `slug` is unique within that language and content type
- frontmatter satisfies `src/content.config.ts`
+9
View File
@@ -0,0 +1,9 @@
import { defineConfig } from 'astro/config';
export default defineConfig({
site: 'https://www.azinstitute4autism.com',
trailingSlash: 'never',
markdown: {
shikiConfig: { theme: 'github-light' }
}
});
+58
View File
@@ -0,0 +1,58 @@
{
"$schema": "https://frontmatter.codes/frontmatter.schema.json",
"frontMatter.framework.id": "astro",
"frontMatter.content.publicFolder": "public",
"frontMatter.content.pageFolders": [
{ "title": "Pages", "path": "[[workspace]]/src/content/pages" },
{ "title": "Blog", "path": "[[workspace]]/src/content/blog" },
{ "title": "Authors", "path": "[[workspace]]/src/content/authors" }
],
"frontMatter.taxonomy.contentTypes": [
{
"name": "page",
"pageBundle": false,
"fields": [
{ "title": "Title", "name": "title", "type": "string", "required": true },
{ "title": "Description", "name": "description", "type": "string" },
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
{ "title": "Language", "name": "lang", "type": "choice", "choices": ["en", "ar", "es"] },
{ "title": "Canonical", "name": "canonical", "type": "string" },
{ "title": "Featured image", "name": "featuredImage", "type": "image" },
{ "title": "Alt text", "name": "alt", "type": "string" },
{ "title": "Translation key", "name": "translationKey", "type": "string" },
{ "title": "Draft", "name": "draft", "type": "boolean", "default": false }
]
},
{
"name": "blog",
"pageBundle": false,
"fields": [
{ "title": "Title", "name": "title", "type": "string", "required": true },
{ "title": "Description", "name": "description", "type": "string" },
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
{ "title": "Date", "name": "date", "type": "datetime", "required": true },
{ "title": "Author", "name": "author", "type": "string", "default": "rula-diab" },
{ "title": "Category", "name": "category", "type": "string" },
{ "title": "Tags", "name": "tags", "type": "tags" },
{ "title": "Language", "name": "lang", "type": "choice", "choices": ["en", "ar", "es"] },
{ "title": "Featured image", "name": "featuredImage", "type": "image" },
{ "title": "Alt text", "name": "alt", "type": "string" },
{ "title": "Canonical", "name": "canonical", "type": "string" },
{ "title": "Translation key", "name": "translationKey", "type": "string" },
{ "title": "Draft", "name": "draft", "type": "boolean", "default": false }
]
},
{
"name": "author",
"pageBundle": false,
"fields": [
{ "title": "Name", "name": "name", "type": "string", "required": true },
{ "title": "Slug", "name": "slug", "type": "string", "required": true },
{ "title": "Description", "name": "description", "type": "string" },
{ "title": "Avatar", "name": "avatar", "type": "image" },
{ "title": "Language", "name": "lang", "type": "choice", "choices": ["en", "ar", "es"] },
{ "title": "Translation key", "name": "translationKey", "type": "string" }
]
}
]
}
+10
View File
@@ -0,0 +1,10 @@
# Raw Source Mirror
The read-only wget mirror used for this migration lives outside this Astro
project at:
```txt
../www.azinstitute4autism.com
```
Run `npm run extract` to regenerate content and inventories from that source.
+5983
View File
File diff suppressed because it is too large Load Diff
+28
View File
@@ -0,0 +1,28 @@
{
"name": "arizona-institute-for-autism",
"private": true,
"type": "module",
"engines": {
"node": ">=20.19.0"
},
"scripts": {
"dev": "astro dev",
"build": "astro build",
"build:sandbox": "NODE_OPTIONS=--require=./tools/localhost-dns.cjs astro build",
"preview": "astro preview",
"extract": "node tools/extract-fallback.mjs",
"extract:full": "node tools/extract-site.mjs",
"crawl:live": "node tools/crawl-live-site.mjs",
"audit:links": "node tools/audit-links.mjs",
"generate:sitemap": "node tools/generate-sitemap.mjs",
"generate:redirects": "node tools/generate-redirects.mjs"
},
"dependencies": {
"astro": "^5.10.0",
"cheerio": "^1.1.0",
"fast-glob": "^3.3.3",
"gray-matter": "^4.0.3",
"turndown": "^7.2.0",
"zod": "^3.25.0"
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

@@ -0,0 +1,28 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 100 100"
width="420" height="420">
<defs>
<g id="tooth" transform="translate(50,50)" fill="#ff914d">
<path d="m0 50 h1 q8 0 8 -6 q0 -8 8 -10 h-20"/>
<path d="m0 50 h1 q8 0 8 -6 q0 -8 8 -10 h-20" transform="scale(-1,1)"/>
</g>
</defs>
<g id="gear">
<circle cx="50" cy="50" r="32" stroke="#ff914d" stroke-width="10" fill="none"/>
<g id="teeth">
<use xlink:href="#tooth" transform="rotate( -10 50 50 )"/>
<use xlink:href="#tooth" transform="rotate( 35 50 50 )"/>
<use xlink:href="#tooth" transform="rotate( 80 50 50 )"/>
<use xlink:href="#tooth" transform="rotate( 125 50 50 )"/>
<use xlink:href="#tooth" transform="rotate( 170 50 50 )"/>
<use xlink:href="#tooth" transform="rotate( 215 50 50 )"/>
<use xlink:href="#tooth" transform="rotate( 260 50 50 )"/>
<use xlink:href="#tooth" transform="rotate( 305 50 50 )"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1 @@
<svg viewBox="10 19.5 180 165" height="200" width="200" xmlns="http://www.w3.org/2000/svg" role="presentation" aria-hidden="true" aria-label="" fill="#254080"><path d="M10 184.5h38.7V48.2H10v136.3zM25.8 119c-3.8-1.4-7.7-3.5-7.7-9.4A11.2 11.2 0 0 1 28 98v-6h4.5v6c3.1.1 6.2 1 9 2.7l-3.7 7c-1.7-1.4-4-2.3-6.2-2.4-2.2 0-4.1.9-4.1 2.7 0 2.3 3 3.2 4.7 3.9 5.6 1.8 10.6 3.8 10.6 10.6s-4 10.4-10.3 11.9v6H28v-5.7a20.7 20.7 0 0 1-12.1-4.4l4-7.4c2.3 2.4 5.5 3.8 8.8 4.2 2 0 4.6-1.2 4.6-3.6.1-2.7-3.8-3.1-7.5-4.6zm125.5 8.1v57.4H190v-57.4h-38.7zm-46.8 57.4h38.7V111h-38.7v73.5zm-47.7 0h38.7V86.8H56.8v97.7zM93.5 65.8a346.8 346.8 0 0 0 93.8 47l1.8-5.4c-33-10.6-64-26.2-92.2-46.2a336.3 336.3 0 0 1-35-28.7l6.6-6.7-23.7-6.3 6.4 23.7 6.7-6.7a348.5 348.5 0 0 0 35.6 29.3z"/></svg>

After

Width:  |  Height:  |  Size: 765 B

@@ -0,0 +1 @@
<svg viewBox="34.5 28 130.999 144" height="200" width="200" xmlns="http://www.w3.org/2000/svg" role="presentation" aria-hidden="true" aria-label="" fill="#254080"><path d="M129.8 85h-6v-3.7c0-6.6-15.4-11.3-23.8-11.3s-23.8 4.7-23.8 11.3V85h-6v-3.7C70.2 69 91.2 64 100 64s29.8 5 29.8 17.3V85z"/><path d="M93.5 172H80.3a3 3 0 0 1-2.8-2l-8.9-28H51.7c-9.5 0-17.2-7.8-17.2-17.4v-36c0-7 5.6-12.6 12.5-12.6h.4c6.6 0 13 2.8 17.5 7.6L74.5 94H91a3 3 0 0 1 3 3.3c-.5 5-4.2 14.7-15 14.7H63.7a3 3 0 0 1-2-.9l-.3-.2v7.1h11.9a15 15 0 0 1 14 10.4l9.2 40a3 3 0 0 1-.6 2.5 3 3 0 0 1-2.3 1.1zm-11-6h7.3l-8.3-36a9 9 0 0 0-8.3-6H58.3a3 3 0 0 1-3-3v-16.2L47 96l4.2-4.2L65 106h14.3c5 0 7.1-3.3 8.1-6H73.2a3 3 0 0 1-2.2-1L60.5 87.8a17.9 17.9 0 0 0-13-5.7H47c-3.6 0-6.5 3-6.5 6.6v36c0 6.3 5 11.4 11.2 11.4h19a3 3 0 0 1 3 2l8.8 28zM55.3 73c-8 0-14.8-6.9-14.8-15v-3c0-8.1 6.8-15 14.8-15s15 6.9 15 15v3a15 15 0 0 1-15 15zm0-27a9 9 0 0 0-8.9 9v3c0 4.9 4.1 9 9 9s8.9-4.1 8.9-9v-3a9 9 0 0 0-9-9zm63.8 126H106a3 3 0 0 1-2.4-1.1 3 3 0 0 1-.5-2.6l9-40 .1-.2a15 15 0 0 1 14-10h12.5v-7.8l-.8.8a3 3 0 0 1-2.1 1h-15c-10.7 0-14.4-9.7-14.8-14.8a3 3 0 0 1 .7-2.3 3 3 0 0 1 2.2-1h16l9.7-10.4A23.8 23.8 0 0 1 152 76h.4a13 13 0 0 1 13.1 12.6v36c0 9.4-8.2 17.4-17.8 17.4h-16.9l-8.8 28a3 3 0 0 1-2.9 2zm-9.4-6h7.3l8.8-28a3 3 0 0 1 2.9-2h19c6.4 0 11.8-5.2 11.8-11.4v-36c0-3.5-3.3-6.6-7-6.6h-.5a17.9 17.9 0 0 0-13 5.7l-10.5 11.4a3 3 0 0 1-2.2 1h-13.6c1 2.6 3.2 6 8.1 6h13.8l14-14.2 4.1 4.2-8 8.2V121a3 3 0 0 1-3 3h-15.4a9 9 0 0 0-8.4 6l-8.2 36zm35-93c-8.1 0-15-6.9-15-15v-3c0-8.1 6.9-15 15-15s14.8 6.9 14.8 15v3c0 8.1-6.8 15-14.8 15zm0-27a9 9 0 0 0-9 9v3c0 4.9 4.1 9 9 9s8.9-4.1 8.9-9v-3a9 9 0 0 0-9-9z"/><path d="M141.7 106v6H58.3v-6h83.4zM100 61c-8 0-14.9-6.9-14.9-15v-3c0-8.1 6.8-15 14.9-15 8 0 14.9 6.9 14.9 15v3c0 8.1-6.8 15-14.9 15zm0-27a9 9 0 0 0-9 9v3c0 4.9 4.2 9 9 9s9-4.1 9-9v-3c0-4.9-4.2-9-9-9z"/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 651 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,6 @@
<svg viewBox="10 25 180 150" height="200" width="200" xmlns="http://www.w3.org/2000/svg" role="presentation" aria-hidden="true" aria-label="" fill="#254080">
<path d="M142.2 44.2a82 82 0 0 1 5.5 8.4 60.8 60.8 0 0 1-39.3 114.5 91.5 91.5 0 0 1-9.5 3.3 66.8 66.8 0 0 0 24.4 4.6 66.8 66.8 0 0 0 19-130.8z"/>
<path d="M173.8 108.2c0-16-7.5-30.3-19.1-39.6a80.8 80.8 0 0 1 3.6 23.9 81 81 0 0 1-34.6 66.2c27.7-.2 50-22.7 50-50.5z"/>
<path d="M144.8 92.5a67.5 67.5 0 1 0-135 0 67.5 67.5 0 0 0 135 0zm-67.4 61.3A61.4 61.4 0 1 1 77.6 31a61.4 61.4 0 0 1-.2 122.8z"/>
<path d="M77.4 41.5a51 51 0 1 0 0 102 51 51 0 0 0 0-102zM90.1 112c-2.2 2.7-5 4.5-8.6 5.5v6.8h-5.8v-6.6a17 17 0 0 1-9.4-4.3 20.4 20.4 0 0 1-4.8-10.1l7-1.5a17 17 0 0 0 3.5 7c1.5 1.3 3.4 2 5.8 2a8 8 0 0 0 5.8-2.3 7.6 7.6 0 0 0 2.3-5.8c0-2-.6-3.8-1.9-5-.7-.7-1.6-1.4-2.9-2.2l-5-2.5a24 24 0 0 1-8-5 12 12 0 0 1-3.2-8.4c0-1.5.3-3 .8-4.2s1.2-2.5 2-3.6 2.2-2 3.5-2.8c1.4-.8 3-1.4 5-1.9V61h4.9v6c2.8.4 4.8 1.3 6.4 2.5s3.1 3.2 4.6 5.8l-6.2 3.5c-1.9-3.4-4.3-5.1-7.3-5.1-1.9 0-3.5.5-4.7 1.6s-1.8 2.5-1.8 4.2c0 1.5.5 2.7 1.5 3.8 1 1 3 2 5.9 3.4 2.6 1.2 4.7 2.3 6.4 3.3s3 2 3.8 3c2.4 2.6 3.6 5.7 3.6 9.4 0 3.6-1 6.8-3.2 9.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="21.843 32.157 156.313 135.686" role="presentation" aria-hidden="true" aria-label="" fill="#254080"><path d="M137.3 99.4a50 50 0 0 0-33.8 11.3V105c0-14.6-18-26-40.8-26s-40.9 11.4-40.9 26v39.8l10.7 1a291.7 291.7 0 0 0 30 1.6c9.9 0 19.6-.5 29.4-1.5l4.6-.4v19.7l10.6 1a291.8 291.8 0 0 0 30.1 1.6c9.8 0 19.6-.4 29.3-1.4l11.7-1.2v-39.7c0-14.6-18-26-40.9-26zm-40.8 39-5.3.6-7 .6v-26h-2.5v26.1a285.2 285.2 0 0 1-38 0v-26H41v25.9a284.2 284.2 0 0 1-7.9-.7l-4.4-.5V105c0-10.3 15.5-19 33.9-19s33.8 8.7 33.8 19v33.4zm74.7 20.5-5.4.5-6.9.6v-26.2h-2.5v26.4a285.3 285.3 0 0 1-38.1 0v-26.4h-2.6V160a280.5 280.5 0 0 1-7.8-.7l-4.4-.4v-33.4c0-10.3 15.5-19 33.8-19s33.9 8.7 33.9 19v33.4zM137.3 94a20.8 20.8 0 1 0 0-41.6 20.8 20.8 0 0 0 0 41.6zm0-34.5a13.8 13.8 0 1 1 0 27.5 13.8 13.8 0 0 1 0-27.5zM62.7 73.7a20.8 20.8 0 1 0 0-41.6 20.8 20.8 0 0 0 0 41.6zm0-34.5a13.8 13.8 0 1 1 0 27.5 13.8 13.8 0 0 1 0-27.5z"/></svg>

After

Width:  |  Height:  |  Size: 970 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 KiB

@@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21 5.25L12 13.5L3 5.25" stroke="#2B4EFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M3 5.25H21V18C21 18.1989 20.921 18.3897 20.7803 18.5303C20.6397 18.671 20.4489 18.75 20.25 18.75H3.75C3.55109 18.75 3.36032 18.671 3.21967 18.5303C3.07902 18.3897 3 18.1989 3 18V5.25Z" stroke="#2B4EFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M10.3636 12L3.23126 18.538" stroke="#2B4EFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M20.7688 18.5381L13.6363 12" stroke="#2B4EFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 738 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

@@ -0,0 +1 @@
<svg viewBox="19.999 19.938 160.002 160.063" height="200" width="200" xmlns="http://www.w3.org/2000/svg" role="presentation" aria-hidden="true" aria-label="" fill="#254080"><path d="M176.2 169.8a3.8 3.8 0 0 1-3.8-3.8V43H27.6v123a3.8 3.8 0 1 1-7.6 0V39a3.8 3.8 0 0 1 3.8-3.8h152.4A3.8 3.8 0 0 1 180 39v127a3.8 3.8 0 0 1-3.8 3.8z"/><path d="M176.2 78.4H23.8a3.8 3.8 0 1 1 0-7.6h152.4a3.8 3.8 0 1 1 0 7.6zM100 58a3.8 3.8 0 0 1-3.8-3.7V23.8a3.8 3.8 0 1 1 7.6 0v30.5A3.8 3.8 0 0 1 100 58zm-25.4 0a3.8 3.8 0 0 1-3.8-3.7V23.8a3.8 3.8 0 1 1 7.6 0v30.5a3.8 3.8 0 0 1-3.8 3.8zm50.8 0a3.8 3.8 0 0 1-3.8-3.7V23.8a3.8 3.8 0 1 1 7.6 0v30.5a3.8 3.8 0 0 1-3.8 3.8zm-76.2 0a3.8 3.8 0 0 1-3.8-3.7V23.8a3.8 3.8 0 1 1 7.6 0v30.5a3.8 3.8 0 0 1-3.8 3.8zm101.6 0a3.8 3.8 0 0 1-3.8-3.7V23.8a3.8 3.8 0 1 1 7.6 0v30.5a3.8 3.8 0 0 1-3.8 3.8zM34 180a14 14 0 0 1-14-14 3.8 3.8 0 1 1 7.6 0 6.4 6.4 0 0 0 6.4 6.4 3.8 3.8 0 1 1 0 7.6zm132 0a3.8 3.8 0 1 1 0-7.6 6.4 6.4 0 0 0 6.4-6.4 3.8 3.8 0 1 1 7.6 0 14 14 0 0 1-14 14z"/><path d="M166 180H34a3.8 3.8 0 1 1 0-7.6h132a3.8 3.8 0 1 1 0 7.6zM49.2 119a3.8 3.8 0 0 1-3.8-3.8V95a3.8 3.8 0 1 1 7.6 0v20.3a3.8 3.8 0 0 1-3.8 3.8zm20.3 0a3.8 3.8 0 0 1-3.8-3.8V95a3.8 3.8 0 1 1 7.6 0v20.3a3.8 3.8 0 0 1-3.8 3.8z"/><path d="M69.5 98.7H49.2a3.8 3.8 0 1 1 0-7.6h20.3a3.8 3.8 0 0 1 0 7.6zm0 20.3H49.2a3.8 3.8 0 1 1 0-7.6h20.3a3.8 3.8 0 0 1 0 7.6zm-20.3 40.7a3.8 3.8 0 0 1-3.8-3.8v-20.3a3.8 3.8 0 1 1 7.6 0v20.3a3.8 3.8 0 0 1-3.8 3.8zm20.3 0a3.8 3.8 0 0 1-3.8-3.8v-20.3a3.8 3.8 0 1 1 7.6 0v20.3a3.8 3.8 0 0 1-3.8 3.8z"/><path d="M69.5 139.4H49.2a3.8 3.8 0 1 1 0-7.7h20.3a3.8 3.8 0 0 1 0 7.7zm0 20.3H49.2a3.8 3.8 0 1 1 0-7.6h20.3a3.8 3.8 0 0 1 0 7.6zM89.8 119a3.8 3.8 0 0 1-3.8-3.8V95a3.8 3.8 0 1 1 7.7 0v20.3a3.8 3.8 0 0 1-3.9 3.8zm20.4 0a3.8 3.8 0 0 1-3.9-3.8V95a3.8 3.8 0 1 1 7.7 0v20.3a3.8 3.8 0 0 1-3.8 3.8z"/><path d="M110.2 98.7H89.8a3.8 3.8 0 1 1 0-7.6h20.4a3.8 3.8 0 1 1 0 7.6zm0 20.3H89.8a3.8 3.8 0 1 1 0-7.6h20.4a3.8 3.8 0 1 1 0 7.6zm-20.4 40.7a3.8 3.8 0 0 1-3.8-3.8v-20.3a3.8 3.8 0 1 1 7.7 0v20.3a3.8 3.8 0 0 1-3.9 3.8zm20.4 0a3.8 3.8 0 0 1-3.9-3.8v-20.3a3.8 3.8 0 1 1 7.7 0v20.3a3.8 3.8 0 0 1-3.8 3.8z"/><path d="M110.2 139.4H89.8a3.8 3.8 0 1 1 0-7.7h20.4a3.8 3.8 0 1 1 0 7.7zm0 20.3H89.8a3.8 3.8 0 1 1 0-7.6h20.4a3.8 3.8 0 1 1 0 7.6zm20.3-40.7a3.8 3.8 0 0 1-3.8-3.8V95a3.8 3.8 0 1 1 7.6 0v20.3a3.8 3.8 0 0 1-3.8 3.8zm20.3 0a3.8 3.8 0 0 1-3.8-3.8V95a3.8 3.8 0 1 1 7.6 0v20.3a3.8 3.8 0 0 1-3.8 3.8z"/><path d="M150.8 98.7h-20.3a3.8 3.8 0 1 1 0-7.6h20.3a3.8 3.8 0 1 1 0 7.6zm0 20.3h-20.3a3.8 3.8 0 1 1 0-7.6h20.3a3.8 3.8 0 1 1 0 7.6zm-20.3 40.7a3.8 3.8 0 0 1-3.8-3.8v-20.3a3.8 3.8 0 1 1 7.6 0v20.3a3.8 3.8 0 0 1-3.8 3.8zm20.3 0a3.8 3.8 0 0 1-3.8-3.8v-20.3a3.8 3.8 0 1 1 7.6 0v20.3a3.8 3.8 0 0 1-3.8 3.8z"/><path d="M150.8 139.4h-20.3a3.8 3.8 0 1 1 0-7.7h20.3a3.8 3.8 0 1 1 0 7.7zm0 20.3h-20.3a3.8 3.8 0 1 1 0-7.6h20.3a3.8 3.8 0 1 1 0 7.6z"/></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Some files were not shown because too many files have changed in this diff Show More