Compare commits
26 Commits
main
..
796bc223af
| Author | SHA1 | Date | |
|---|---|---|---|
|
796bc223af
|
|||
|
626f1b7f37
|
|||
|
1eeb5a6820
|
|||
|
5f4fbd5e05
|
|||
|
1bc0224f76
|
|||
|
ce5e53c71f
|
|||
|
615412c880
|
|||
|
c2b49e66d9
|
|||
|
ef13d4a6e6
|
|||
|
1ec59b0c07
|
|||
|
e1023b5d50
|
|||
|
4bbd58b361
|
|||
|
5a66284bb5
|
|||
|
0b276e7b32
|
|||
|
e51f2133ef
|
|||
|
4b23bff789
|
|||
|
e44b95db2e
|
|||
|
bb4cee97a8
|
|||
|
826d5e8c7d
|
|||
|
9678fc9a3c
|
|||
|
e4e6f15e9a
|
|||
|
bfed3bee15
|
|||
|
96edc6e538
|
|||
|
33e78ff8a5
|
|||
|
f3d3562cec
|
|||
|
d8a0016dba
|
@@ -38,6 +38,7 @@ temp/
|
|||||||
# Editor and IDE state
|
# Editor and IDE state
|
||||||
.idea/
|
.idea/
|
||||||
.vscode/
|
.vscode/
|
||||||
|
.frontmatter/
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
|
||||||
# Local AI-agent state
|
# Local AI-agent state
|
||||||
@@ -47,6 +48,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
|
||||||
|
|||||||
@@ -1,5 +1,16 @@
|
|||||||
# AGENTS.md
|
# AGENTS.md
|
||||||
|
|
||||||
|
## Instruction precedence
|
||||||
|
|
||||||
|
This file is the authoritative project policy for all editors and AI agents.
|
||||||
|
`MIGRATION_BRIEF.md` supplies detailed implementation guidance and must be read
|
||||||
|
with this file. If the two files appear to conflict, follow `AGENTS.md` and
|
||||||
|
update the conflicting documentation before continuing.
|
||||||
|
|
||||||
|
The `migration-foundation` branch is a reference and recovery point only. It is
|
||||||
|
not the visual or architectural source of truth. Reuse its nonvisual tooling or
|
||||||
|
content only after verifying it against the live public site.
|
||||||
|
|
||||||
## Project
|
## Project
|
||||||
|
|
||||||
This repository contains a mirrored copy of the Arizona Institute for Autism website.
|
This repository contains a mirrored copy of the Arizona Institute for Autism website.
|
||||||
@@ -26,9 +37,29 @@ Do not modify, move, rename, or delete `./www.azinstitute4autism.com`.
|
|||||||
|
|
||||||
Treat the mirror as read-only raw source material.
|
Treat the mirror as read-only raw source material.
|
||||||
|
|
||||||
|
The live public website is the single source of truth:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
https://www.azinstitute4autism.com
|
||||||
|
```
|
||||||
|
|
||||||
|
Use the mirror as a convenient local extraction and inspection aid only. The
|
||||||
|
mirror may contain stale, missing, rewritten, or incorrectly downloaded
|
||||||
|
content and assets. Verify content, design, URLs, metadata, assets, and
|
||||||
|
responsive behavior against the live public site before treating them as
|
||||||
|
authoritative. When the live site and mirror disagree, follow the live site and
|
||||||
|
document material discrepancies.
|
||||||
|
|
||||||
## Primary goal
|
## Primary goal
|
||||||
|
|
||||||
Create a clean, maintainable Astro + TypeScript site in `./www` that reproduces the current public site as faithfully as practical while replacing HubSpot-generated structure with a future-friendly static site architecture.
|
Create a clean, maintainable Astro + TypeScript site in `./www` that faithfully
|
||||||
|
reproduces the current public site's content, visual design, page structure, and
|
||||||
|
responsive behavior while replacing HubSpot-generated implementation details
|
||||||
|
with a future-friendly static site architecture.
|
||||||
|
|
||||||
|
This is a fidelity-first migration, not a redesign. The live public site is the
|
||||||
|
source of truth for both content and presentation. Maintainability must improve
|
||||||
|
the implementation without materially changing what visitors see.
|
||||||
|
|
||||||
The new site should be suitable for:
|
The new site should be suitable for:
|
||||||
|
|
||||||
@@ -149,13 +180,31 @@ Do not invent large Arabic or Spanish translations unless source content is avai
|
|||||||
|
|
||||||
## Design rules
|
## Design rules
|
||||||
|
|
||||||
The new design should be mostly faithful to the current site while becoming more maintainable.
|
The new site must remain visually faithful to the live public site. Do not
|
||||||
|
reinterpret, modernize, simplify, or genericize the design unless a specific
|
||||||
|
change is required for accessibility or reliable responsive behavior.
|
||||||
|
|
||||||
|
Preserve each source page's:
|
||||||
|
|
||||||
|
- section order and visible content
|
||||||
|
- typography, font weights, and text hierarchy
|
||||||
|
- colors, backgrounds, and decorative treatments
|
||||||
|
- container widths, spacing, alignment, and proportions
|
||||||
|
- imagery, crops, icons, borders, radii, and shadows
|
||||||
|
- header, navigation, footer, calls to action, and forms
|
||||||
|
- desktop and mobile responsive behavior
|
||||||
|
|
||||||
|
Reuse exact source assets and locally available fonts wherever practical.
|
||||||
|
Do not replace distinctive source sections with generic cards, generic heroes,
|
||||||
|
or a new site-wide layout merely to make component reuse easier.
|
||||||
|
|
||||||
Use plain CSS with design tokens.
|
Use plain CSS with design tokens.
|
||||||
|
|
||||||
Create reusable Astro components for repeated layout sections.
|
Create reusable Astro components for repeated layout sections.
|
||||||
|
|
||||||
Do not create a messy page-by-page clone of HubSpot output.
|
Component boundaries must follow genuinely repeated source patterns. Distinctive
|
||||||
|
pages and sections may retain page-specific markup and CSS when abstraction
|
||||||
|
would reduce fidelity. Do not copy HubSpot's generated DOM or CSS wholesale.
|
||||||
|
|
||||||
Favor:
|
Favor:
|
||||||
|
|
||||||
@@ -163,10 +212,31 @@ Favor:
|
|||||||
- reusable components
|
- reusable components
|
||||||
- organized CSS
|
- organized CSS
|
||||||
- clear data files
|
- clear data files
|
||||||
- consistent spacing
|
- source-faithful spacing
|
||||||
- accessible markup
|
- accessible markup
|
||||||
- predictable file structure
|
- predictable file structure
|
||||||
|
|
||||||
|
### Visual validation
|
||||||
|
|
||||||
|
Before implementing a page family or shared component:
|
||||||
|
|
||||||
|
1. Inspect the live page and its HTML, CSS, assets, and responsive behavior.
|
||||||
|
2. Use the mirror to accelerate local extraction and inspection.
|
||||||
|
3. Resolve any discrepancy in favor of the live public site.
|
||||||
|
4. Record the source structure and important visual details.
|
||||||
|
5. Identify which patterns are truly shared and which are page-specific.
|
||||||
|
|
||||||
|
After implementation, compare the Astro output with the live public site at
|
||||||
|
representative desktop and mobile viewport widths. Check the full page, not
|
||||||
|
only the header or first viewport. Fix material differences before treating the
|
||||||
|
page as complete.
|
||||||
|
|
||||||
|
Document intentional visual deviations and their reasons in:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
reports/migration-summary.md
|
||||||
|
```
|
||||||
|
|
||||||
## URL and SEO rules
|
## URL and SEO rules
|
||||||
|
|
||||||
Preserve existing public URL paths whenever possible.
|
Preserve existing public URL paths whenever possible.
|
||||||
@@ -294,9 +364,11 @@ reports/migration-summary.md
|
|||||||
|
|
||||||
Before large filesystem changes:
|
Before large filesystem changes:
|
||||||
|
|
||||||
1. Inspect the mirror.
|
1. Inspect the live public site.
|
||||||
2. Summarize the implementation plan.
|
2. Inspect the mirror and identify relevant discrepancies.
|
||||||
3. Proceed methodically.
|
3. Inspect the relevant source HTML, CSS, and assets in detail.
|
||||||
|
4. Summarize the implementation and visual-validation plan.
|
||||||
|
5. Proceed methodically.
|
||||||
|
|
||||||
At the end of a task, summarize:
|
At the end of a task, summarize:
|
||||||
|
|
||||||
@@ -307,4 +379,7 @@ At the end of a task, summarize:
|
|||||||
- audit results
|
- audit results
|
||||||
- unresolved issues
|
- unresolved issues
|
||||||
|
|
||||||
Prioritize a clean, maintainable foundation over a pixel-perfect but messy clone.
|
Prioritize visual fidelity and content correctness while implementing them with
|
||||||
|
clean, maintainable Astro code. Do not trade away visible source design for a
|
||||||
|
generic foundation, and do not copy HubSpot-generated implementation merely to
|
||||||
|
obtain fidelity.
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ workspace even when Codex cannot discover its Git metadata.
|
|||||||
The profile:
|
The profile:
|
||||||
|
|
||||||
- never pauses for approval
|
- never pauses for approval
|
||||||
|
- automatically permits configured Playwright and OpenAI documentation MCP tools
|
||||||
- limits filesystem access to minimal runtime files plus this project
|
- limits filesystem access to minimal runtime files plus this project
|
||||||
- allows writes in this project
|
- allows writes in this project
|
||||||
- keeps `.codex` and `www.azinstitute4autism.com` read-only
|
- keeps `.codex` and `www.azinstitute4autism.com` read-only
|
||||||
@@ -42,6 +43,27 @@ The profile is stored outside the workspace at:
|
|||||||
Do not add `--sandbox`; legacy sandbox flags override the custom permission
|
Do not add `--sandbox`; legacy sandbox flags override the custom permission
|
||||||
profile. Do not use `--dangerously-bypass-approvals-and-sandbox`.
|
profile. Do not use `--dangerously-bypass-approvals-and-sandbox`.
|
||||||
|
|
||||||
|
The launcher also applies these session overrides:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
approval_policy="never"
|
||||||
|
mcp_servers.playwright.default_tools_approval_mode="approve"
|
||||||
|
mcp_servers.playwright.tool_timeout_sec=300
|
||||||
|
mcp_servers.openaiDeveloperDocs.default_tools_approval_mode="approve"
|
||||||
|
mcp_servers.openaiDeveloperDocs.tool_timeout_sec=300
|
||||||
|
```
|
||||||
|
|
||||||
|
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
|
## 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
|
||||||
@@ -79,3 +101,9 @@ Check the startup banner before assigning work. It should report:
|
|||||||
approval: never
|
approval: never
|
||||||
sandbox: workspace-write ... (network access enabled)
|
sandbox: workspace-write ... (network access enabled)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Then check the MCP configuration:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
/mcp verbose
|
||||||
|
```
|
||||||
|
|||||||
@@ -36,19 +36,24 @@ For the migration task:
|
|||||||
|
|
||||||
1. Read `AGENTS.md`.
|
1. Read `AGENTS.md`.
|
||||||
2. Read `MIGRATION_BRIEF.md`.
|
2. Read `MIGRATION_BRIEF.md`.
|
||||||
3. Inspect the local mirror.
|
3. Inspect the live public site as the single source of truth.
|
||||||
4. Provide a concise implementation plan.
|
4. Inspect the local mirror as a convenient extraction aid and identify
|
||||||
5. Scaffold or update the Astro project in `./www`.
|
relevant discrepancies.
|
||||||
6. Build extraction, crawl, audit, sitemap, and redirect tools.
|
5. Inspect the relevant live HTML, CSS, assets, and responsive behavior.
|
||||||
7. Extract content, media, metadata, navigation, and forms.
|
6. Provide a concise implementation and visual-validation plan.
|
||||||
8. Refactor into reusable Astro components.
|
7. Scaffold or update the Astro project in `./www`.
|
||||||
9. Configure Astro content collections and Front Matter CMS.
|
8. Build extraction, crawl, audit, sitemap, and redirect tools.
|
||||||
10. Add English, Arabic, and Spanish structure.
|
9. Extract content, media, metadata, navigation, and forms.
|
||||||
11. Add RTL CSS for Arabic.
|
10. Refactor genuinely repeated patterns into reusable Astro components.
|
||||||
12. Add SEO, sitemap, robots, redirects, and reports.
|
11. Compare rendered pages with the live site at desktop and mobile widths.
|
||||||
13. Run build and audits.
|
12. Configure Astro content collections and Front Matter CMS.
|
||||||
14. Fix practical errors.
|
13. Add English, Arabic, and Spanish structure.
|
||||||
15. Document incomplete items in `reports/migration-summary.md`.
|
14. Add RTL CSS for Arabic.
|
||||||
|
15. Add SEO, sitemap, robots, redirects, and reports.
|
||||||
|
16. Run build and audits.
|
||||||
|
17. Fix practical errors.
|
||||||
|
18. Document incomplete items and intentional visual deviations in
|
||||||
|
`reports/migration-summary.md`.
|
||||||
|
|
||||||
## Important Claude-specific behavior
|
## Important Claude-specific behavior
|
||||||
|
|
||||||
@@ -60,6 +65,15 @@ When asked to begin migration, first read the relevant project files, then work
|
|||||||
|
|
||||||
Treat `./www.azinstitute4autism.com` as read-only source material.
|
Treat `./www.azinstitute4autism.com` as read-only source material.
|
||||||
|
|
||||||
|
Treat the live public site as the single content and visual source of truth.
|
||||||
|
Use the mirror only as a convenient local extraction and inspection aid. When
|
||||||
|
the live site and mirror disagree, follow the live site and document material
|
||||||
|
discrepancies. This migration is not a redesign. Do not substitute a generic
|
||||||
|
visual system for the live design.
|
||||||
|
|
||||||
|
Treat the `migration-foundation` branch as reference-only. Do not use it as the
|
||||||
|
visual baseline.
|
||||||
|
|
||||||
Do not delete or overwrite raw source assets.
|
Do not delete or overwrite raw source assets.
|
||||||
|
|
||||||
Do not remove files unless you are certain they are generated output in `./www`.
|
Do not remove files unless you are certain they are generated output in `./www`.
|
||||||
|
|||||||
@@ -1,5 +1,18 @@
|
|||||||
# MIGRATION_BRIEF.md
|
# MIGRATION_BRIEF.md
|
||||||
|
|
||||||
|
## Authority and interpretation
|
||||||
|
|
||||||
|
Read and follow `AGENTS.md` first. It is the authoritative project policy; this
|
||||||
|
brief provides detailed implementation guidance. If any wording here appears
|
||||||
|
to conflict with `AGENTS.md`, follow `AGENTS.md` and correct this brief before
|
||||||
|
continuing.
|
||||||
|
|
||||||
|
This is a fidelity-first migration, not a redesign. The raw mirror is a
|
||||||
|
convenient local extraction and inspection aid, but the live public site is the
|
||||||
|
single content and visual source of truth. The `migration-foundation` branch
|
||||||
|
may be consulted for nonvisual tooling and recovered content, but it must not
|
||||||
|
be used as the visual baseline.
|
||||||
|
|
||||||
## Task
|
## Task
|
||||||
|
|
||||||
Migrate the public Arizona Institute for Autism website from a mirrored HubSpot-generated static copy into a clean, maintainable Astro + TypeScript site.
|
Migrate the public Arizona Institute for Autism website from a mirrored HubSpot-generated static copy into a clean, maintainable Astro + TypeScript site.
|
||||||
@@ -24,15 +37,21 @@ wget --mirror --page-requisites --adjust-extension --convert-links --no-parent h
|
|||||||
|
|
||||||
There is no HubSpot export, no HubSpot CLI access, and no HubSpot API access.
|
There is no HubSpot export, no HubSpot CLI access, and no HubSpot API access.
|
||||||
|
|
||||||
Use the local mirror as the primary source.
|
Use the live public website as the single source of truth:
|
||||||
|
|
||||||
If internet access is available, also crawl the live public website to catch missing URLs or assets:
|
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
https://www.azinstitute4autism.com
|
https://www.azinstitute4autism.com
|
||||||
```
|
```
|
||||||
|
|
||||||
The live crawl is only for comparison and gap-filling. The local mirror remains the source of truth.
|
Use the local mirror as a convenient extraction and inspection aid. It may
|
||||||
|
contain stale, missing, rewritten, or incorrectly downloaded content and
|
||||||
|
assets. Verify content, design, URLs, metadata, assets, and responsive behavior
|
||||||
|
against the live site. When the live site and mirror disagree, follow the live
|
||||||
|
site and document material discrepancies.
|
||||||
|
|
||||||
|
If the live site is temporarily unavailable, work that depends on its authority
|
||||||
|
must remain explicitly unverified rather than silently treating the mirror as
|
||||||
|
authoritative.
|
||||||
|
|
||||||
## High-level goal
|
## High-level goal
|
||||||
|
|
||||||
@@ -49,7 +68,7 @@ Create a new Astro site in `./www` that is:
|
|||||||
- SEO-conscious
|
- SEO-conscious
|
||||||
- accessible
|
- accessible
|
||||||
- maintainable
|
- maintainable
|
||||||
- mostly faithful to the current design
|
- faithful to the current design, layout, and responsive behavior
|
||||||
- free of unnecessary HubSpot-generated structure
|
- free of unnecessary HubSpot-generated structure
|
||||||
- prepared for future development and publishing
|
- prepared for future development and publishing
|
||||||
|
|
||||||
@@ -238,11 +257,20 @@ Do not invent extensive translations.
|
|||||||
|
|
||||||
### Design direction
|
### Design direction
|
||||||
|
|
||||||
The new site should be more maintainable while remaining mostly faithful to the current design.
|
The new site must faithfully reproduce the live public site's visible design,
|
||||||
|
layout, content hierarchy, and responsive behavior. Do not redesign,
|
||||||
|
reinterpret, modernize, simplify, or genericize source pages.
|
||||||
|
|
||||||
Do not create a messy clone of HubSpot output.
|
Preserve typography, colors, backgrounds, spacing, proportions, imagery,
|
||||||
|
section order, decorative treatments, navigation, calls to action, forms, and
|
||||||
|
page-specific distinctions. Reuse exact source assets and fonts wherever
|
||||||
|
practical.
|
||||||
|
|
||||||
Refactor repeated sections into reusable components.
|
Do not copy HubSpot-generated DOM or CSS wholesale.
|
||||||
|
|
||||||
|
Refactor genuinely repeated sections into reusable components. Do not force
|
||||||
|
distinctive source sections into generic components when doing so changes their
|
||||||
|
appearance or structure.
|
||||||
|
|
||||||
Use semantic markup.
|
Use semantic markup.
|
||||||
|
|
||||||
@@ -250,6 +278,22 @@ Use plain CSS with design tokens.
|
|||||||
|
|
||||||
Do not use Tailwind.
|
Do not use Tailwind.
|
||||||
|
|
||||||
|
### Fidelity workflow
|
||||||
|
|
||||||
|
For each page family or shared component:
|
||||||
|
|
||||||
|
1. Inspect the live page, HTML, CSS, assets, and responsive behavior.
|
||||||
|
2. Use the mirror to accelerate local extraction and inspection.
|
||||||
|
3. Resolve discrepancies in favor of the live public site.
|
||||||
|
4. Record important visual details and identify genuine shared patterns.
|
||||||
|
5. Implement the page or component in maintainable Astro code.
|
||||||
|
6. Compare the complete rendered page with the live public site at representative
|
||||||
|
desktop and mobile viewport widths.
|
||||||
|
7. Fix material visual differences before marking it complete.
|
||||||
|
|
||||||
|
Document intentional visual deviations and their reasons in
|
||||||
|
`reports/migration-summary.md`.
|
||||||
|
|
||||||
## Required target structure
|
## Required target structure
|
||||||
|
|
||||||
Create this project structure in `./www`:
|
Create this project structure in `./www`:
|
||||||
@@ -643,7 +687,10 @@ src/styles/rtl.css
|
|||||||
src/styles/global.css
|
src/styles/global.css
|
||||||
```
|
```
|
||||||
|
|
||||||
Infer the current site’s visual language from the mirrored CSS and HTML.
|
Extract the current site's visual language from the live public site, using the
|
||||||
|
mirrored CSS and HTML as a convenient local aid after checking for discrepancies.
|
||||||
|
Tokens must encode source values; they must not introduce a replacement visual
|
||||||
|
system.
|
||||||
|
|
||||||
Use design tokens such as:
|
Use design tokens such as:
|
||||||
|
|
||||||
@@ -1168,6 +1215,8 @@ The migration is successful when:
|
|||||||
- `./www` contains a working Astro project
|
- `./www` contains a working Astro project
|
||||||
- `npm run build` succeeds or unresolved build issues are clearly documented
|
- `npm run build` succeeds or unresolved build issues are clearly documented
|
||||||
- main public pages render locally
|
- main public pages render locally
|
||||||
|
- main public pages have been compared with the live site at desktop and mobile
|
||||||
|
widths and have no undocumented material visual differences
|
||||||
- blog posts are migrated into file-based Markdown where feasible
|
- blog posts are migrated into file-based Markdown where feasible
|
||||||
- Markdown files work with Front Matter CMS
|
- Markdown files work with Front Matter CMS
|
||||||
- MDX is available but not overused
|
- MDX is available but not overused
|
||||||
@@ -1191,18 +1240,22 @@ Proceed methodically:
|
|||||||
1. Read `AGENTS.md`.
|
1. Read `AGENTS.md`.
|
||||||
2. Read `CLAUDE.md`, if using Claude Code.
|
2. Read `CLAUDE.md`, if using Claude Code.
|
||||||
3. Read this `MIGRATION_BRIEF.md`.
|
3. Read this `MIGRATION_BRIEF.md`.
|
||||||
4. Inspect `./www.azinstitute4autism.com`.
|
4. Inspect the live public site.
|
||||||
5. Summarize a concise implementation plan.
|
5. Inspect `./www.azinstitute4autism.com` and identify relevant discrepancies.
|
||||||
6. Scaffold Astro in `./www`.
|
6. Summarize a concise implementation plan.
|
||||||
7. Build extraction/reporting scripts.
|
7. Scaffold Astro in `./www`.
|
||||||
8. Extract pages, blog posts, assets, metadata, navigation, and forms.
|
8. Build extraction/reporting scripts.
|
||||||
9. Refactor repeated sections into Astro components.
|
9. Extract pages, blog posts, assets, metadata, navigation, and forms.
|
||||||
10. Configure content collections and Front Matter CMS.
|
10. Refactor repeated sections into Astro components.
|
||||||
11. Add multilingual structure.
|
11. Configure content collections and Front Matter CMS.
|
||||||
12. Add SEO, sitemap, robots, and redirects.
|
12. Add multilingual structure.
|
||||||
13. Add reports.
|
13. Add SEO, sitemap, robots, and redirects.
|
||||||
14. Run build and audits.
|
14. Add reports.
|
||||||
15. Fix errors.
|
15. Run build and audits.
|
||||||
16. Summarize what changed and what still needs manual review.
|
16. Fix errors.
|
||||||
|
17. Summarize what changed and what still needs manual review.
|
||||||
|
|
||||||
Prioritize a clean, maintainable foundation over a messy pixel-perfect clone.
|
Prioritize visual fidelity and content correctness while implementing them with
|
||||||
|
clean, maintainable Astro code. Do not trade away visible source design for a
|
||||||
|
generic foundation, and do not copy HubSpot-generated implementation merely to
|
||||||
|
obtain fidelity.
|
||||||
|
|||||||
@@ -11,5 +11,10 @@ fi
|
|||||||
exec codex \
|
exec codex \
|
||||||
--profile-v2 azi4a2-autonomous \
|
--profile-v2 azi4a2-autonomous \
|
||||||
--strict-config \
|
--strict-config \
|
||||||
|
--config 'approval_policy="never"' \
|
||||||
|
--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="approve"' \
|
||||||
|
--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,407 @@
|
|||||||
|
# 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
|
||||||
|
npm run audit:images
|
||||||
|
npm run audit:blog
|
||||||
|
```
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
### Links And Buttons
|
||||||
|
|
||||||
|
Use normal Markdown links for links within prose:
|
||||||
|
|
||||||
|
```md
|
||||||
|
Read the [ABA therapy guide](/aba-therapy) for more information.
|
||||||
|
```
|
||||||
|
|
||||||
|
Prose links render as the live site's orange inline links. Do not place an
|
||||||
|
ordinary Markdown link on its own line merely to make it look like a button.
|
||||||
|
|
||||||
|
Use `.mdx` and the `Button` component only for a source-verified call to action:
|
||||||
|
|
||||||
|
```mdx
|
||||||
|
import Button from '../../../components/Button.astro';
|
||||||
|
|
||||||
|
<Button href="/client-consultation">Request an Appointment</Button>
|
||||||
|
<Button href="/services" variant="outlined">Explore Services</Button>
|
||||||
|
<Button href="https://example.com" target="_blank">External Action</Button>
|
||||||
|
```
|
||||||
|
|
||||||
|
Available `Button` variants are `filled` (default), `outlined`, and `light`.
|
||||||
|
Available sizes are `default` and `small`. A `_blank` target automatically adds
|
||||||
|
`rel="noopener noreferrer"`.
|
||||||
|
|
||||||
|
Use the optional `Link` component only when an inline link needs an explicit
|
||||||
|
variant or target:
|
||||||
|
|
||||||
|
```mdx
|
||||||
|
import Link from '../../../components/Link.astro';
|
||||||
|
|
||||||
|
<Link href="/library" variant="strong">Browse the library</Link>
|
||||||
|
```
|
||||||
|
|
||||||
|
Normal Markdown links remain preferred for ordinary page and article 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.
|
||||||
|
|
||||||
|
### Edit A Blog FAQ
|
||||||
|
|
||||||
|
Posts with live-style FAQ sections use `.mdx` and import:
|
||||||
|
|
||||||
|
```mdx
|
||||||
|
import FAQAccordion from '../../../components/FAQAccordion.astro';
|
||||||
|
```
|
||||||
|
|
||||||
|
Edit the component's `label`, `heading`, and `items` data in the post. Keep
|
||||||
|
`answer` as plain text for JSON-LD and `answerHtml` as the matching visible
|
||||||
|
answer. Shared FAQ markup, styling, interaction, and schema generation live in
|
||||||
|
`src/components/FAQAccordion.astro`.
|
||||||
|
|
||||||
|
## 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 extract:blog-footers
|
||||||
|
npm run generate:sitemap
|
||||||
|
npm run generate:redirects
|
||||||
|
npm run build
|
||||||
|
npm run audit:links
|
||||||
|
npm run audit:images
|
||||||
|
npm run audit:blog
|
||||||
|
```
|
||||||
|
|
||||||
|
Extraction regenerates content files, copied assets, and inventories. Review
|
||||||
|
the complete Git diff before accepting it. Extraction may recreate FAQ-bearing
|
||||||
|
posts and CTA-bearing pages as Markdown; restore their `FAQAccordion` and
|
||||||
|
`Button` MDX blocks before accepting the result. `npm run audit:blog` reports
|
||||||
|
plain Markdown FAQ sections.
|
||||||
|
|
||||||
|
`npm run extract:blog-footers` preserves the extracted previous/next and
|
||||||
|
similar-post relationships in `src/data/blog-footers.json`, then removes those
|
||||||
|
footer fragments from article prose so `BlogPostFooter.astro` can render them.
|
||||||
|
|
||||||
|
## 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
|
||||||
|
npm run audit:images
|
||||||
|
npm run audit:blog
|
||||||
|
```
|
||||||
|
|
||||||
|
### 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,11 @@
|
|||||||
|
import { defineConfig } from 'astro/config';
|
||||||
|
import mdx from '@astrojs/mdx';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
site: 'https://www.azinstitute4autism.com',
|
||||||
|
trailingSlash: 'never',
|
||||||
|
integrations: [mdx()],
|
||||||
|
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]]/www/src/content/pages" },
|
||||||
|
{ "title": "Blog", "path": "[[workspace]]/www/src/content/blog" },
|
||||||
|
{ "title": "Authors", "path": "[[workspace]]/www/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,33 @@
|
|||||||
|
{
|
||||||
|
"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",
|
||||||
|
"extract:blog-footers": "node tools/extract-blog-footers.mjs",
|
||||||
|
"crawl:live": "node tools/crawl-live-site.mjs",
|
||||||
|
"audit:links": "node tools/audit-links.mjs",
|
||||||
|
"audit:images": "node tools/audit-page-imagery.mjs",
|
||||||
|
"audit:blog": "node tools/audit-blog-content.mjs",
|
||||||
|
"generate:sitemap": "node tools/generate-sitemap.mjs",
|
||||||
|
"generate:redirects": "node tools/generate-redirects.mjs"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@astrojs/mdx": "^4.3.14",
|
||||||
|
"astro": "^5.10.0",
|
||||||
|
"cheerio": "^1.1.0",
|
||||||
|
"fast-glob": "^3.3.3",
|
||||||
|
"gray-matter": "^4.0.3",
|
||||||
|
"swiper": "^12.2.0",
|
||||||
|
"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 |
@@ -0,0 +1,9 @@
|
|||||||
|
<svg width="50" height="41" viewBox="0 0 50 41" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<rect width="50" height="41" fill="url(#pattern0)"/>
|
||||||
|
<defs>
|
||||||
|
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||||
|
<use xlink:href="#image0_209_11128" transform="scale(0.02 0.0243902)"/>
|
||||||
|
</pattern>
|
||||||
|
<image id="image0_209_11128" width="50" height="41" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAApCAYAAAB3LnrpAAAFbElEQVRogbWYa4hUZRjHf887O+rO7pn1QqZdtMQgAxWlm11ISaICa/vQZmnu7rClZRQlRhTYgpmVQQgiLa0zu2vktkbB5gWtyAzdksqIhG4oaJjketmZ3RHXmfP0YTZ3Z+fM5cye+X86PJf//3l4z3nf8z4wAmhzcLqGgx9r2KofCU9BWpHK+Rq2Dmpb5Qwnf1lRpB2UEw++iurLwChgNhAZQZ3ZtbYGJpMoew/0MQRIyiqgYXic60Y0UjGTPtMOetOA6Rxirxxhvc5ardYjJGgGHT9gOoLPrHOKFVfELcFlqDYBYwayuxH7Xqnt+2VEFQ/X6cBH3NqA8uKgUQ4zWu6VJT3nnHIKakQVIRJci+hrQ8xRTHK+1MYPj6zsYVptV1aQiG9HeGCI+Qj9zJflse5seXlfLVWEluBmRFcMNSM86XkTTeOqsOM7EO4aYj5DUqpleTRrEwAmL3tLcBOkNQHCW1IX6yyq2izQpqsC+BO70bQmFKVOGqJ/5cvP2YhGrFdAn003ymECscbiys2i04EPf2wbwrx0Bx9IKLajEI6sjWjYehh4c7gZeEZq6HdbbE70WesRHhpmPcUo/+pCKRwb0XDVNIQ2MjYD6ZBQ9Hu3deaCRqxqILNg1UZZejZaKE9GI9pIGWJ/BAQzopP2G+7KzA1tLb8aaHZw/UNlr6sDNnNFrrNeAm5ziN0nDb2/uiHPi2TZZmBCpkOb3L6+aY1o89ipqL7uGKmyxQ1xPmjEqnb4LlLw+drc8qWviC+xDiTgEHcJMQXtHoVAGykD3nH2ys+yrOeYW87LjWhrxSyQx5255RupP3/eLXlWTK1sAG7I4v28GMrBFUmaVWTdju1viyF3gjZiEFmVPcDeVwyvAdC2yokIi7NG2XqwGHJHTLEeRJmexZvkQvmhYmhTK5AwNaTuFc4Q39Matho0Yt1YjEg6lyzN4U1QcWG9tlTW6NbAZFe0ABqx9gN3F5hzCvgC4RMCsZ1SQ7JQMe2gnL7K7iwbihN+B92NmvZ8B7FoZOxYSHYDvkILGoKjiGwkEH2/kH1fI8H7QXcXoQNKFz42SG3sMye3QZP3UFwTANNQ3Uif9YNGgrfkL0YXFKkDwjxsPtWI1TnwR5AGg8icoskHMRP0QN4hhJG5Hmgtwi77SVuDt6ZRg872gBzAj7BFW4JLskaozvJIayK27k2dfSkY0CkekQMIqmFtDWSsskYYA0z0UKsK23Tqh+ODAAbkGg/JAUZh+zZnmoPXeqwDMJX+S2sgdY6MLoHA7RquWJhuSo4pgQ4IKzRceYUBqkojYIbd803m/cYbVCA8ahB6SySwUBuH/LuJHSuRDiD3GbRkjVRx/bjB70/L+kqkA8hcA5wonUBy0uXHaM/fgF0aHZ1kgCOlIQdU/f8/yvNcRDhaIiW/AfV0KpIG5cwwy3clUjpjMP5dpOZV3kJI0G8dT7Op7vRcJ4WjRmrPHUcp6laWE8qPsvxkPM3WH+wEvLsyD2rtT22PIu96To60Z1hSjTmc+iOETzoMgNRHd4Hu8ZD6X+KjnQZv4Pe/DZz0TEnkS6mNHho8sDT5FELO0X3h0Odk5WnH80mWno2iEsKLrVjoRXQlDJmaSOjCCaAaNJ41sTD2tVLfuz1nRCi6B5UXRqZDP8oTUhv7A4aNf6QudgAjC0ndy91BSKCslvromoLCQ9FNKCHgomstOIuYRVIfuzwDy5hjSW2si35mAlsQEgXRKl2o3CGhmKtNQ0KxCEm9GeSrAlNsRLdhErOkrmdvGlfO+lrHTUETi1EWADNIXYzKgdPAMdCDGOmQ2liXmwactQJzsH01wJ2kppATEATlNMpviH4Npl3qo3865f8Hlv/IWRfm5IAAAAAASUVORK5CYII="/>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 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: 19 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 24 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: 41 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 74 KiB |