feat: convert site to astro via codex
@@ -47,6 +47,11 @@ temp/
|
||||
.cursor/
|
||||
.continue/
|
||||
.windsurf/
|
||||
/.playwright-mcp/
|
||||
|
||||
# Local visual-comparison captures
|
||||
/live-*.png
|
||||
/live-*-snapshot.md
|
||||
|
||||
# Operating-system metadata
|
||||
.DS_Store
|
||||
|
||||
@@ -47,17 +47,23 @@ The launcher also applies these session overrides:
|
||||
|
||||
```txt
|
||||
approval_policy="never"
|
||||
mcp_servers.playwright.default_tools_approval_mode="auto"
|
||||
mcp_servers.playwright.default_tools_approval_mode="approve"
|
||||
mcp_servers.playwright.tool_timeout_sec=300
|
||||
mcp_servers.openaiDeveloperDocs.default_tools_approval_mode="auto"
|
||||
mcp_servers.openaiDeveloperDocs.default_tools_approval_mode="approve"
|
||||
mcp_servers.openaiDeveloperDocs.tool_timeout_sec=300
|
||||
```
|
||||
|
||||
These settings allow MCP tools to run without approval prompts and give
|
||||
The server-level `approve` settings pre-approve MCP tools without writing
|
||||
incompatible per-tool approval tables into the profile. These settings allow
|
||||
MCP tools to run without approval prompts and give
|
||||
long-running browser operations up to five minutes. An MCP server may still
|
||||
fail or time out. MCP elicitations that inherently require user input are
|
||||
rejected rather than shown as unattended prompts.
|
||||
|
||||
Do not persist an individual MCP tool approval when prompted by an older or
|
||||
misconfigured session. Codex CLI 0.133.0 may write a per-tool table that the
|
||||
profile-v2 parser rejects on the next launch.
|
||||
|
||||
## Verification
|
||||
|
||||
The nested setup smoke test confirmed that the project is readable and
|
||||
|
||||
@@ -12,9 +12,9 @@ exec codex \
|
||||
--profile-v2 azi4a2-autonomous \
|
||||
--strict-config \
|
||||
--config 'approval_policy="never"' \
|
||||
--config 'mcp_servers.playwright.default_tools_approval_mode="auto"' \
|
||||
--config 'mcp_servers.playwright.default_tools_approval_mode="approve"' \
|
||||
--config 'mcp_servers.playwright.tool_timeout_sec=300' \
|
||||
--config 'mcp_servers.openaiDeveloperDocs.default_tools_approval_mode="auto"' \
|
||||
--config 'mcp_servers.openaiDeveloperDocs.default_tools_approval_mode="approve"' \
|
||||
--config 'mcp_servers.openaiDeveloperDocs.tool_timeout_sec=300' \
|
||||
--cd "$repo_root" \
|
||||
"$@"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
in
|
||||
{
|
||||
overlays.default = final: prev: rec {
|
||||
nodejs = prev.nodejs;
|
||||
nodejs = prev.nodejs_22;
|
||||
yarn = (prev.yarn.override { inherit nodejs; });
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
PUBLIC_AIA_API_BASE=https://api.azinstitute4autism.com
|
||||
@@ -0,0 +1,8 @@
|
||||
node_modules/
|
||||
dist/
|
||||
.astro/
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
reports/live-crawl.json
|
||||
reports/*.png
|
||||
@@ -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
|
||||

|
||||
```
|
||||
|
||||
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`
|
||||
@@ -0,0 +1,9 @@
|
||||
import { defineConfig } from 'astro/config';
|
||||
|
||||
export default defineConfig({
|
||||
site: 'https://www.azinstitute4autism.com',
|
||||
trailingSlash: 'never',
|
||||
markdown: {
|
||||
shikiConfig: { theme: 'github-light' }
|
||||
}
|
||||
});
|
||||
@@ -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" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 569 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 553 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
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 |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 651 KiB |
|
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 |
|
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 |
|
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 |
|
After Width: | Height: | Size: 531 KiB |
|
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 |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 40 KiB |