feat: convert site to astro via codex
@@ -47,6 +47,11 @@ temp/
|
|||||||
.cursor/
|
.cursor/
|
||||||
.continue/
|
.continue/
|
||||||
.windsurf/
|
.windsurf/
|
||||||
|
/.playwright-mcp/
|
||||||
|
|
||||||
|
# Local visual-comparison captures
|
||||||
|
/live-*.png
|
||||||
|
/live-*-snapshot.md
|
||||||
|
|
||||||
# Operating-system metadata
|
# Operating-system metadata
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|||||||
@@ -47,17 +47,23 @@ The launcher also applies these session overrides:
|
|||||||
|
|
||||||
```txt
|
```txt
|
||||||
approval_policy="never"
|
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.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
|
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
|
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
|
fail or time out. MCP elicitations that inherently require user input are
|
||||||
rejected rather than shown as unattended prompts.
|
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
|
## Verification
|
||||||
|
|
||||||
The nested setup smoke test confirmed that the project is readable and
|
The nested setup smoke test confirmed that the project is readable and
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ exec codex \
|
|||||||
--profile-v2 azi4a2-autonomous \
|
--profile-v2 azi4a2-autonomous \
|
||||||
--strict-config \
|
--strict-config \
|
||||||
--config 'approval_policy="never"' \
|
--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.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' \
|
--config 'mcp_servers.openaiDeveloperDocs.tool_timeout_sec=300' \
|
||||||
--cd "$repo_root" \
|
--cd "$repo_root" \
|
||||||
"$@"
|
"$@"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
overlays.default = final: prev: rec {
|
overlays.default = final: prev: rec {
|
||||||
nodejs = prev.nodejs;
|
nodejs = prev.nodejs_22;
|
||||||
yarn = (prev.yarn.override { inherit nodejs; });
|
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 |