Compare commits
45
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96d3c138f6
|
||
|
|
6648d1d7d5
|
||
|
|
9c391c8c05
|
||
|
|
77b83f5d21
|
||
|
|
8c9c581cc0
|
||
|
|
46090e9159
|
||
|
|
fd8e12f925
|
||
|
|
b73e92a8a4
|
||
|
|
a3f7f90fdc
|
||
|
|
a39caf1a34
|
||
|
|
38c1f78d4f
|
||
|
|
5cbe055c34
|
||
|
|
2f208aa6e4
|
||
|
|
c6202d2ac6
|
||
|
|
a3f666c974
|
||
|
|
4a7045a1cb
|
||
|
|
a048d395f7
|
||
|
|
9398321fac
|
||
|
|
d348174f95
|
||
|
|
d0d8222e40
|
||
|
|
ed2bda5c02
|
||
|
|
96d829accb
|
||
|
|
67951fa031
|
||
|
|
c98a51795d
|
||
|
|
95d78c22eb
|
||
|
|
05f5c59721
|
||
|
|
a498dc59d7
|
||
|
|
4a2087d4e3
|
||
|
|
5e75ace58d
|
||
|
|
562109f207
|
||
|
|
f5c715f5c0
|
||
|
|
496744471a
|
||
|
|
4675809911
|
||
|
|
f64c535971
|
||
|
|
79e9e08464
|
||
|
|
7ef8b3a585
|
||
|
|
1be3ad0410
|
||
|
|
36f82a9a76
|
||
|
|
0db10a04d8
|
||
|
|
3003a68e39
|
||
|
|
266137ff5f
|
||
|
|
cd5a3c6868
|
||
|
|
785c2ccaf7
|
||
|
|
6c4ac504da
|
||
|
|
26db9e76e1
|
@@ -58,6 +58,3 @@ temp/
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
Desktop.ini
|
||||
|
||||
# Read-only wget mirror used as migration source material
|
||||
/www.azinstitute4autism.com/
|
||||
|
||||
@@ -13,42 +13,20 @@ content only after verifying it against the live public site.
|
||||
|
||||
## Project
|
||||
|
||||
This repository contains a mirrored copy of the Arizona Institute for Autism website.
|
||||
|
||||
Raw mirror source:
|
||||
|
||||
```txt
|
||||
./www.azinstitute4autism.com
|
||||
```
|
||||
|
||||
New Astro site target:
|
||||
|
||||
```txt
|
||||
./www
|
||||
```
|
||||
|
||||
The mirror was created with:
|
||||
|
||||
```sh
|
||||
wget --mirror --page-requisites --adjust-extension --convert-links --no-parent https://www.azinstitute4autism.com
|
||||
```
|
||||
|
||||
Do not modify, move, rename, or delete `./www.azinstitute4autism.com`.
|
||||
|
||||
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.
|
||||
Verify content, design, URLs, metadata, assets, and responsive behavior against
|
||||
the live public site before treating them as authoritative.
|
||||
|
||||
## Primary goal
|
||||
|
||||
@@ -221,10 +199,9 @@ Favor:
|
||||
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.
|
||||
2. Resolve any discrepancy in favor of the live public site.
|
||||
3. Record the source structure and important visual details.
|
||||
4. 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
|
||||
@@ -365,10 +342,9 @@ reports/migration-summary.md
|
||||
Before large filesystem changes:
|
||||
|
||||
1. Inspect the live public site.
|
||||
2. Inspect the mirror and identify relevant discrepancies.
|
||||
3. Inspect the relevant source HTML, CSS, and assets in detail.
|
||||
4. Summarize the implementation and visual-validation plan.
|
||||
5. Proceed methodically.
|
||||
2. Inspect the relevant source HTML, CSS, and assets in detail.
|
||||
3. Summarize the implementation and visual-validation plan.
|
||||
4. Proceed methodically.
|
||||
|
||||
At the end of a task, summarize:
|
||||
|
||||
|
||||
+20
-79
@@ -7,21 +7,15 @@ 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
|
||||
This is a fidelity-first migration, not a redesign. 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
|
||||
|
||||
Migrate the public Arizona Institute for Autism website from a mirrored HubSpot-generated static copy into a clean, maintainable Astro + TypeScript site.
|
||||
|
||||
Raw mirrored source:
|
||||
|
||||
```txt
|
||||
./www.azinstitute4autism.com
|
||||
```
|
||||
Migrate the public Arizona Institute for Autism website into a clean,
|
||||
maintainable Astro + TypeScript site.
|
||||
|
||||
New Astro project target:
|
||||
|
||||
@@ -29,12 +23,6 @@ New Astro project target:
|
||||
./www
|
||||
```
|
||||
|
||||
The raw mirror was created with:
|
||||
|
||||
```sh
|
||||
wget --mirror --page-requisites --adjust-extension --convert-links --no-parent https://www.azinstitute4autism.com
|
||||
```
|
||||
|
||||
There is no HubSpot export, no HubSpot CLI access, and no HubSpot API access.
|
||||
|
||||
Use the live public website as the single source of truth:
|
||||
@@ -43,15 +31,9 @@ Use the live public website as the single source of truth:
|
||||
https://www.azinstitute4autism.com
|
||||
```
|
||||
|
||||
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.
|
||||
Verify content, design, URLs, metadata, assets, and responsive behavior against
|
||||
the live site. If the live site is temporarily unavailable, work that depends
|
||||
on its authority must remain explicitly unverified.
|
||||
|
||||
## High-level goal
|
||||
|
||||
@@ -76,10 +58,6 @@ Create a new Astro site in `./www` that is:
|
||||
|
||||
Do not modify or delete:
|
||||
|
||||
```txt
|
||||
./www.azinstitute4autism.com
|
||||
```
|
||||
|
||||
Do not depend on:
|
||||
|
||||
- HubSpot CLI
|
||||
@@ -283,13 +261,12 @@ Do not use Tailwind.
|
||||
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
|
||||
2. Resolve discrepancies in favor of the live public site.
|
||||
3. Record important visual details and identify genuine shared patterns.
|
||||
4. Implement the page or component in maintainable Astro code.
|
||||
5. 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.
|
||||
6. Fix material visual differences before marking it complete.
|
||||
|
||||
Document intentional visual deviations and their reasons in
|
||||
`reports/migration-summary.md`.
|
||||
@@ -406,15 +383,11 @@ www/
|
||||
rtl.css
|
||||
|
||||
tools/
|
||||
extract-site.mjs
|
||||
crawl-live-site.mjs
|
||||
audit-links.mjs
|
||||
generate-redirects.mjs
|
||||
generate-sitemap.mjs
|
||||
|
||||
original/
|
||||
README.md
|
||||
|
||||
reports/
|
||||
url-inventory.csv
|
||||
asset-inventory.csv
|
||||
@@ -427,17 +400,10 @@ www/
|
||||
migration-summary.md
|
||||
```
|
||||
|
||||
The `original/README.md` file should explain that the raw source mirror lives outside the Astro project at:
|
||||
|
||||
```txt
|
||||
../www.azinstitute4autism.com
|
||||
```
|
||||
|
||||
Do not duplicate the entire raw mirror inside `./www` unless there is a specific reason.
|
||||
|
||||
## Initial inspection
|
||||
|
||||
Before creating or modifying files, inspect the mirror.
|
||||
Before creating or modifying files, inspect the live public site and current
|
||||
project sources.
|
||||
|
||||
Look for:
|
||||
|
||||
@@ -687,9 +653,8 @@ src/styles/rtl.css
|
||||
src/styles/global.css
|
||||
```
|
||||
|
||||
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
|
||||
Extract the current site's visual language from the live public site. Tokens
|
||||
must encode source values; they must not introduce a replacement visual
|
||||
system.
|
||||
|
||||
Use design tokens such as:
|
||||
@@ -837,7 +802,7 @@ It should support:
|
||||
- hreflang links where translation relationships are known
|
||||
- JSON-LD/schema when extracted
|
||||
|
||||
Preserve metadata from the mirror wherever possible.
|
||||
Preserve metadata from the live site wherever possible.
|
||||
|
||||
Generate:
|
||||
|
||||
@@ -890,49 +855,27 @@ src/pages/es/[...slug].astro
|
||||
|
||||
Implement routing in a clean, maintainable way.
|
||||
|
||||
## Extraction scripts
|
||||
## Migration utility scripts
|
||||
|
||||
Create:
|
||||
|
||||
```txt
|
||||
tools/extract-site.mjs
|
||||
tools/crawl-live-site.mjs
|
||||
tools/audit-links.mjs
|
||||
tools/generate-redirects.mjs
|
||||
tools/generate-sitemap.mjs
|
||||
```
|
||||
|
||||
### `extract-site.mjs`
|
||||
|
||||
This script should:
|
||||
|
||||
- scan the mirror
|
||||
- identify HTML files
|
||||
- infer URL paths
|
||||
- identify page type
|
||||
- identify blog posts
|
||||
- identify listing pages
|
||||
- extract title/meta/H1/body/main content
|
||||
- extract canonical and Open Graph metadata
|
||||
- extract schema/JSON-LD where present
|
||||
- convert blog posts to Markdown where feasible
|
||||
- create page Markdown where useful
|
||||
- copy/normalize assets
|
||||
- rewrite local asset references
|
||||
- create initial reports
|
||||
|
||||
The script does not need to be perfect, but it should be useful and documented.
|
||||
|
||||
### `crawl-live-site.mjs`
|
||||
|
||||
This script should:
|
||||
|
||||
- attempt to crawl the live site if internet is available
|
||||
- discover URLs from sitemap and internal links
|
||||
- compare discovered URLs against the mirror
|
||||
- compare discovered URLs against the current site source and generated output
|
||||
- document missing URLs/assets
|
||||
- avoid aggressive crawling
|
||||
- respect the scope of `www.azinstitute4autism.com`
|
||||
- respect the live-site scope
|
||||
|
||||
### `audit-links.mjs`
|
||||
|
||||
@@ -1143,7 +1086,6 @@ Add scripts similar to:
|
||||
"dev": "astro dev",
|
||||
"build": "astro check && astro build",
|
||||
"preview": "astro preview",
|
||||
"extract": "node tools/extract-site.mjs",
|
||||
"crawl": "node tools/crawl-live-site.mjs",
|
||||
"audit:links": "node tools/audit-links.mjs",
|
||||
"generate:sitemap": "node tools/generate-sitemap.mjs",
|
||||
@@ -1165,7 +1107,6 @@ www/README.md
|
||||
It should explain:
|
||||
|
||||
- what the project is
|
||||
- where the raw mirror lives
|
||||
- how the migration was performed
|
||||
- how to install dependencies
|
||||
- how to run local dev
|
||||
@@ -1241,7 +1182,7 @@ Proceed methodically:
|
||||
2. Read `CLAUDE.md`, if using Claude Code.
|
||||
3. Read this `MIGRATION_BRIEF.md`.
|
||||
4. Inspect the live public site.
|
||||
5. Inspect `./www.azinstitute4autism.com` and identify relevant discrepancies.
|
||||
5. Inspect the relevant live public site pages and identify discrepancies.
|
||||
6. Summarize a concise implementation plan.
|
||||
7. Scaffold Astro in `./www`.
|
||||
8. Build extraction/reporting scripts.
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ if [[ "${1:-}" == "exec" ]]; then
|
||||
fi
|
||||
|
||||
exec codex \
|
||||
--profile-v2 azi4a2-autonomous \
|
||||
--profile azi4a2-autonomous \
|
||||
--strict-config \
|
||||
--config 'approval_policy="never"' \
|
||||
--config 'mcp_servers.playwright.default_tools_approval_mode="approve"' \
|
||||
|
||||
@@ -18,7 +18,11 @@
|
||||
|
||||
devShells = forEachSupportedSystem ({ pkgs }: {
|
||||
default = pkgs.mkShell {
|
||||
packages = with pkgs; [ node2nix nodejs nodePackages.pnpm yarn ];
|
||||
packages = with pkgs; [
|
||||
node2nix nodejs nodePackages.pnpm yarn
|
||||
python3
|
||||
fd
|
||||
];
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
PUBLIC_AIA_API_BASE=https://api.azinstitute4autism.com
|
||||
PUBLIC_ALLOW_INDEXING=false
|
||||
|
||||
+37
-62
@@ -1,8 +1,7 @@
|
||||
# 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`.
|
||||
website.
|
||||
|
||||
## Quick Start
|
||||
|
||||
@@ -23,9 +22,6 @@ 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:
|
||||
@@ -42,19 +38,23 @@ cd www
|
||||
npm install
|
||||
```
|
||||
|
||||
Copy the example environment file when testing the like/view counter:
|
||||
Copy the example environment file when testing the like/view counter or staging
|
||||
SEO behavior:
|
||||
|
||||
```sh
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
The default value is:
|
||||
The default values are:
|
||||
|
||||
```txt
|
||||
PUBLIC_AIA_API_BASE=https://api.azinstitute4autism.com
|
||||
PUBLIC_ALLOW_INDEXING=false
|
||||
```
|
||||
|
||||
The site still renders when that API is unavailable.
|
||||
The site still renders when the AIA API is unavailable. Migration and staging
|
||||
builds emit `noindex,nofollow` by default; set `PUBLIC_ALLOW_INDEXING=true`
|
||||
only for production builds on the canonical domain.
|
||||
|
||||
## View And Build
|
||||
|
||||
@@ -198,15 +198,6 @@ 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
|
||||
@@ -215,6 +206,35 @@ 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.
|
||||
|
||||
### Edit The Homepage
|
||||
|
||||
The English and Spanish homepages are driven from the structured `home:`
|
||||
frontmatter block in:
|
||||
|
||||
```txt
|
||||
src/content/pages/en/index.md
|
||||
src/content/pages/es/index.md
|
||||
```
|
||||
|
||||
`HomePage.astro` renders those named sections in order. Use the section names
|
||||
as the editing surface:
|
||||
|
||||
```txt
|
||||
hero
|
||||
servicesIntro
|
||||
benefits
|
||||
skills
|
||||
insurance
|
||||
esa
|
||||
financialHelp
|
||||
process
|
||||
director
|
||||
testimonials
|
||||
```
|
||||
|
||||
Keep homepage copy in those named blocks so the page remains easy to scan in
|
||||
Front Matter CMS and VS Code. `src/content.config.ts` validates the structure.
|
||||
|
||||
### Images And Downloads
|
||||
|
||||
Store content-referenced assets in:
|
||||
@@ -302,51 +322,6 @@ Edit the component's `label`, `heading`, and `items` data in the post. Keep
|
||||
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/`.
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
# 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.
|
||||
@@ -10,8 +10,6 @@
|
||||
"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",
|
||||
|
||||
@@ -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 |
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 58 KiB |
@@ -1,3 +0,0 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Sitemap: https://www.azinstitute4autism.com/sitemap.xml
|
||||
@@ -1,3 +1,3 @@
|
||||
# Broken Links
|
||||
|
||||
Rendered output is unavailable in the sandbox; source routes and public assets were audited. No broken internal source links were detected.
|
||||
No broken internal build links detected.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# Cleanup Log
|
||||
|
||||
- Replaced HubSpot-generated wrappers, inline styles, scripts, analytics, and modules with reusable Astro components.
|
||||
- Preserved canonical clean URLs while excluding local mirror query-string and AMP duplicates.
|
||||
- Preserved canonical clean URLs while excluding HubSpot query-string and AMP duplicates.
|
||||
- Consolidated responsive `hs-fs` image variants to canonical `hubfs` assets where available.
|
||||
- Excluded mirrored HubSpot CSS and JavaScript from the new public asset package.
|
||||
- Self-hosted canonical images, SVGs, fonts, and PDFs from the mirror.
|
||||
- Excluded HubSpot CSS and JavaScript from the new public asset package.
|
||||
- Self-hosted canonical images, SVGs, fonts, and PDFs where practical.
|
||||
- Recreated navigation and footer from structured JSON.
|
||||
- Recreated visible contact and consultation forms as static accessible HTML.
|
||||
- Used the source palette: AIA blue `#254080`, dark blue, straw yellow, orange, and teal.
|
||||
- Used the live site's locally mirrored Playfair Display headings, Rubik body copy, and Caveat accent font.
|
||||
- Used self-hosted Playfair Display headings, Rubik body copy, and Caveat accent font.
|
||||
- Added multilingual collection and route structure with Arabic RTL support.
|
||||
- Kept all extracted source content editable as Markdown.
|
||||
- Replaced the initial generic rounded-card visual system with live-derived
|
||||
@@ -18,19 +18,20 @@
|
||||
- Rebuilt the homepage in the live section order and rebuilt shared service,
|
||||
library-index, and blog-post families against live public references.
|
||||
- Reused the same complete live-derived homepage layout for English and Spanish.
|
||||
- Reorganized the homepage source into named `home:` frontmatter blocks so the
|
||||
content is easier to inspect and edit without changing the rendered layout.
|
||||
- Replaced the extracted linear team article with a dedicated live-derived team grid.
|
||||
- Repaired mirror-rewritten PDF, lightbox, CTA, and relative content links.
|
||||
- Repaired rewritten PDF, lightbox, CTA, and relative content links.
|
||||
- Limited language-switcher choices to translations that have generated routes.
|
||||
- Verified and implemented the current production likes/views API contract.
|
||||
- Recovered 18 live page-banner assets that the wget mirror missed because
|
||||
HubSpot injected them through malformed inline `background-image` styles.
|
||||
- Recovered 18 live page-banner assets that HubSpot injected through malformed
|
||||
inline `background-image` styles.
|
||||
- Restored the live library banner and consultation form section background.
|
||||
- Added a mapped-page-imagery audit to prevent missing visual assets from
|
||||
silently passing the source link audit.
|
||||
- Removed duplicated article titles, author/date blocks, and featured images
|
||||
from all 65 blog Markdown bodies; these elements are rendered by the shared
|
||||
blog-post layout. Updated both extractors and added a blog-content audit to
|
||||
prevent recurrence.
|
||||
blog-post layout. Added a blog-content audit to prevent recurrence.
|
||||
- Converted 19 FAQ-bearing blog posts to MDX and restored a reusable
|
||||
`FAQAccordion.astro` component that owns the live-style accordion and
|
||||
matching `FAQPage` JSON-LD.
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
## Status
|
||||
|
||||
A maintainable Astro migration and substantial fidelity-first pass are
|
||||
implemented. The live public site, not the wget mirror, was used as the
|
||||
authority for the shared shell, English and Spanish homepages, service-page
|
||||
family, team page, library indexes, and blog-post family.
|
||||
implemented. The live public site was used as the authority for the shared
|
||||
shell, English and Spanish homepages, service-page family, team page, library
|
||||
indexes, and blog-post family.
|
||||
|
||||
## Migrated Content and Assets
|
||||
|
||||
@@ -15,9 +15,9 @@ family, team page, library indexes, and blog-post family.
|
||||
- 167 self-hosted images, 20 font files, and two PDF downloads.
|
||||
- Current June and May 2026 English library articles are included.
|
||||
|
||||
The raw mirror remains untouched. HubSpot-generated wrappers, analytics,
|
||||
scripts, CSS, query-language duplicates, AMP variants, pagination, and author
|
||||
archive variants are not carried into the Astro implementation.
|
||||
HubSpot-generated wrappers, analytics, scripts, CSS, query-language duplicates,
|
||||
AMP variants, pagination, and author archive variants are not carried into the
|
||||
Astro implementation.
|
||||
|
||||
## Live-Source Fidelity Pass
|
||||
|
||||
@@ -35,6 +35,8 @@ Implemented fidelity work includes:
|
||||
utility links, footer columns, and contact information.
|
||||
- Rebuilt the complete English and Spanish homepages in their live section
|
||||
order using one reusable Astro component and self-hosted source assets.
|
||||
- Moved the English and Spanish homepage copy into section-oriented `home:`
|
||||
frontmatter blocks so the page is easier to edit in Front Matter CMS.
|
||||
- Rebuilt service pages around the live compact title banner and editorial
|
||||
presentation, with current visible headings and working calls to action.
|
||||
- Recovered and restored the live decorative hero imagery for all mapped
|
||||
@@ -42,6 +44,9 @@ Implemented fidelity work includes:
|
||||
- Restored the consultation form section's injected background image.
|
||||
- Added a dedicated live-derived team card grid rather than presenting the
|
||||
extracted team content as a generic article.
|
||||
- Rebuilt the contact page around the live two-column content/form section and
|
||||
full-width Leaflet map while retaining local clickable obfuscated phone
|
||||
links.
|
||||
- Rebuilt library indexes and blog-post presentation around the live sidebar,
|
||||
article list, byline, featured-image, and counter patterns.
|
||||
- Converted FAQ-bearing posts to MDX and recreated their live-style accordions
|
||||
@@ -50,7 +55,7 @@ Implemented fidelity work includes:
|
||||
links, fawn backgrounds, spacing, rounded presentation, and quote-mark SVG.
|
||||
- Replaced generic oversized cards, rounded controls, and marketing heroes
|
||||
with live-derived typography, palette, widths, spacing, and compact controls.
|
||||
- Corrected material live/mirror discrepancies found during the pass,
|
||||
- Corrected material live-source discrepancies found during the pass,
|
||||
including current homepage ESA copy, testimonial content, and ABA copy.
|
||||
|
||||
## URLs and Redirects
|
||||
@@ -75,6 +80,12 @@ backend and spam-protection TODO comments. Submission is intentionally
|
||||
disabled. Appointment and enrollment calls to action route to the static
|
||||
consultation page rather than retaining the production Jotform backend.
|
||||
|
||||
## External Dependencies
|
||||
|
||||
- The contact page map intentionally matches the live Leaflet/OpenStreetMap
|
||||
implementation and loads Leaflet from `unpkg.com` plus map tiles from
|
||||
`tile.openstreetmap.org`.
|
||||
|
||||
## Multilingual
|
||||
|
||||
- Spanish has the full live-derived homepage, translated service pages,
|
||||
@@ -103,6 +114,9 @@ unavailable.
|
||||
|
||||
- Canonicals, Open Graph tags, Twitter card tags, semantic titles, and global
|
||||
organization JSON-LD are emitted by shared layouts.
|
||||
- Organization JSON-LD intentionally omits raw `telephone` and `email` fields;
|
||||
visible contact details use the Astro obfuscation component to avoid exposing
|
||||
plain email and phone targets in rendered HTML.
|
||||
- Library-index canonicals and current visible page H1s are explicitly set.
|
||||
- Extracted image alt text is retained where available.
|
||||
- Semantic landmarks, skip link, labeled forms, keyboard-operable navigation,
|
||||
@@ -123,11 +137,15 @@ unavailable.
|
||||
- `npm run generate:sitemap`: passed; generated 97 URLs.
|
||||
- `npm run generate:redirects`: passed.
|
||||
- All migration `.mjs` tools and the sandbox DNS helper pass `node --check`.
|
||||
- The Astro compiler parsed all 33 `.astro` files successfully.
|
||||
- The Astro compiler parsed all 49 `.astro` files successfully.
|
||||
- `npm run build`: blocked before compilation because this autonomous sandbox
|
||||
denies `/etc/hosts`, causing `getaddrinfo EAI_AGAIN localhost`.
|
||||
- `npm run build:sandbox`: bypasses that DNS lookup and reaches Vite, then the
|
||||
sandbox rejects esbuild's required child process with `spawn EPERM`.
|
||||
cannot resolve `localhost`, causing `getaddrinfo EAI_AGAIN localhost`.
|
||||
- `npm run build:sandbox`: passed; generated 97 static pages.
|
||||
- Live contact-page structure was inspected in browser at a 1280px desktop
|
||||
viewport; local generated HTML was checked for the contact layout, Leaflet
|
||||
assets, map container, and obfuscated clickable phone script. Local browser
|
||||
rendering was blocked because the Playwright browser cannot reach shell
|
||||
loopback servers and blocks `file:` URLs in this environment.
|
||||
- Nix shell verification and `npm audit` retrieval were blocked by sandbox
|
||||
proxy/cache network resets.
|
||||
|
||||
@@ -139,7 +157,7 @@ final production-build proof.
|
||||
- Perform full-page desktop and mobile visual comparisons for page-specific
|
||||
layouts beyond the completed homepage, team, service, library, and article
|
||||
families.
|
||||
- Editorially review extracted long-form content for remaining mirror artifacts,
|
||||
- Editorially review extracted long-form content for remaining extraction artifacts,
|
||||
stale phone/email references, and heading hierarchy.
|
||||
- Review all source alt text, keyboard behavior, screen-reader output, and
|
||||
contrast with accessibility tooling.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from,to,status,reason
|
||||
"/aba","/aba-therapy",301,"Brief alias to preserved mirror URL"
|
||||
"/autismevaluations","/autism-evaluations",301,"Brief alias to preserved mirror URL"
|
||||
"/learnersocialclub","/learner-social-club",301,"Brief alias to preserved mirror URL"
|
||||
"/aba","/aba-therapy",301,"Brief legacy alias to preserved URL"
|
||||
"/autismevaluations","/autism-evaluations",301,"Brief legacy alias to preserved URL"
|
||||
"/learnersocialclub","/learner-social-club",301,"Brief legacy alias to preserved URL"
|
||||
|
||||
|
@@ -18,8 +18,8 @@
|
||||
|
||||
## Cleanup
|
||||
|
||||
- HubSpot `?hsLang=...` mirror duplicates are excluded from generated routes.
|
||||
- AMP mirror variants are excluded because Astro pages are responsive and static.
|
||||
- HubSpot `?hsLang=...` duplicates are excluded from generated routes.
|
||||
- AMP variants are excluded because Astro pages are responsive and static.
|
||||
- Blog pagination and author archive variants are not preserved as separate generated pages.
|
||||
- Brief aliases `/aba`, `/autismevaluations`, and `/learnersocialclub` redirect to preserved source URLs.
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
import LikeViewCounter from './LikeViewCounter.astro';
|
||||
const { post, prefix = '' } = Astro.props;
|
||||
const href = `${prefix}/library/${post.data.slug}`.replace('//', '/');
|
||||
const readMore = { en: 'Read More', es: 'Leer Más', ar: 'اقرأ المزيد' }[post.data.lang] || 'Read More';
|
||||
@@ -9,6 +10,31 @@ const readMore = { en: 'Read More', es: 'Leer Más', ar: 'اقرأ المزيد'
|
||||
<div class="blog-card-meta"><img src="/assets/images/rula-diab-avatar.jpg" alt="" /><p>Rula Diab, Clinical Director, M.Ed, BCBA, LBA<br /><time datetime={post.data.date.toISOString()}>{post.data.date.toLocaleDateString(post.data.lang, { day: 'numeric', month: 'long', year: 'numeric' })}</time></p></div>
|
||||
<h3><a href={href}>{post.data.title}</a></h3>
|
||||
<p>{post.data.description}</p>
|
||||
<a class="text-link" href={href}>{readMore}</a>
|
||||
<div class="blog-card-footer" style="align-items:center;display:flex;justify-content:space-between;gap:var(--space-lg);margin-top:auto;">
|
||||
<a class="text-link" href={href}>{readMore}</a>
|
||||
<LikeViewCounter slug={post.data.slug} />
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<style>
|
||||
.blog-card-meta { align-items: center; display: flex; font-size: .78rem; gap: .75rem; }
|
||||
.blog-card-meta img { aspect-ratio: 1; border-radius: 50%; height: 42px; width: 42px; }
|
||||
.blog-card { background: white; border: 0; border-radius: 4px; box-shadow: rgba(54, 48, 48, 0.28) 0 0 12px 0; display: flex; margin-bottom: 40px; overflow: hidden; }
|
||||
.blog-card > a { flex: 0 0 232px; display: block; margin: .75rem; }
|
||||
.blog-card > a img { aspect-ratio: auto; display: block; height: 100%; object-fit: cover; width: 100%; }
|
||||
.blog-card .card-body { display: flex; flex: 1; flex-direction: column; gap: 0; padding: 20px; }
|
||||
.blog-card .card-body h3 { font-family: var(--font-body); }
|
||||
.blog-card-footer { align-items: center; display: flex; justify-content: space-between; gap: var(--space-lg); margin-top: auto; }
|
||||
:global(.blog-card .like-view-counter) { border-top: 0; justify-content: space-between; margin-block: 0; padding-top: 0; width: auto; }
|
||||
.blog-card h3 { font-size: 1.35rem; margin-bottom: 1rem; }
|
||||
.blog-card p { margin-bottom: 1rem; }
|
||||
.blog-card .text-link { margin: 0; }
|
||||
|
||||
@media (max-width: 760px) {
|
||||
.blog-card { flex-direction: column; }
|
||||
.blog-card > a { flex-basis: auto; }
|
||||
.blog-card > a img { height: auto; aspect-ratio: 4 / 3; }
|
||||
.blog-card-footer { align-items: flex-start; flex-direction: column; }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
---
|
||||
interface Props {
|
||||
href: string;
|
||||
href?: string;
|
||||
variant?: 'filled' | 'outlined' | 'light';
|
||||
size?: 'default' | 'small';
|
||||
center?: boolean;
|
||||
target?: '_blank' | '_self';
|
||||
rel?: string;
|
||||
type?: 'submit' | 'button' | 'reset';
|
||||
disabled?: boolean;
|
||||
'aria-describedby'?: string;
|
||||
class?: string;
|
||||
}
|
||||
|
||||
@@ -12,20 +16,28 @@ const {
|
||||
href,
|
||||
variant = 'filled',
|
||||
size = 'default',
|
||||
center = false,
|
||||
target,
|
||||
rel = target === '_blank' ? 'noopener noreferrer' : undefined,
|
||||
type,
|
||||
disabled,
|
||||
'aria-describedby': ariaDescribedby,
|
||||
class: className
|
||||
} = Astro.props;
|
||||
|
||||
const classes = [
|
||||
'content-button',
|
||||
`content-button--${variant}`,
|
||||
{ 'content-button--small': size === 'small', 'content-button--center': center },
|
||||
className
|
||||
];
|
||||
---
|
||||
|
||||
<a
|
||||
class:list={['content-button', `content-button--${variant}`, { 'content-button--small': size === 'small' }, className]}
|
||||
href={href}
|
||||
target={target}
|
||||
rel={rel}
|
||||
>
|
||||
<slot />
|
||||
</a>
|
||||
{href ? (
|
||||
<a class:list={classes} href={href} target={target} rel={rel}><slot /></a>
|
||||
) : (
|
||||
<button class:list={classes} type={type} disabled={disabled} aria-describedby={ariaDescribedby}><slot /></button>
|
||||
)}
|
||||
|
||||
<style>
|
||||
.content-button {
|
||||
@@ -36,8 +48,9 @@ const {
|
||||
display: inline-block;
|
||||
font-weight: 400;
|
||||
line-height: 1.5;
|
||||
padding: .8rem 1.2rem;
|
||||
padding: .65rem 1.2rem;
|
||||
text-decoration: none;
|
||||
transition: .3s linear all;
|
||||
}
|
||||
|
||||
.content-button:hover,
|
||||
@@ -65,6 +78,16 @@ const {
|
||||
|
||||
.content-button--small {
|
||||
font-size: .9rem;
|
||||
padding: .5rem 1rem;
|
||||
}
|
||||
|
||||
.content-button--center {
|
||||
margin-block: 2.5rem;
|
||||
margin-inline-start: 50%;
|
||||
translate: -50%;
|
||||
}
|
||||
|
||||
button.content-button {
|
||||
cursor: pointer;
|
||||
font: inherit;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<section class="cta-band">
|
||||
<div class="container split">
|
||||
<div><p class="eyebrow">Start the conversation</p><h2>Find the right support for your learner.</h2></div>
|
||||
<a class="button button-light" href="/client-consultation">Schedule a Free Consultation</a>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
import Button from './Button.astro';
|
||||
import ContactObfuscation from './ContactObfuscation.astro';
|
||||
|
||||
interface Props {
|
||||
title?: string;
|
||||
}
|
||||
|
||||
const { title = 'Contact AIA' } = Astro.props;
|
||||
---
|
||||
|
||||
<form class="contact-form-card" method="post" action="">
|
||||
<!-- TODO: Wire this form to Netlify Forms, a custom API endpoint, or another backend service. -->
|
||||
<!-- TODO: Add spam protection before production launch. -->
|
||||
<h3 class="contact-form-card__title">{title}</h3>
|
||||
<div class="contact-form-card__fields">
|
||||
<label>Parent or guardian name<input name="name" autocomplete="name" /></label>
|
||||
<label>Email<input type="email" name="email" autocomplete="email" /></label>
|
||||
<label>Phone<input type="tel" name="phone" autocomplete="tel" /></label>
|
||||
<label>Service of interest<select name="service"><option>ABA Therapy</option><option>Autism Evaluation</option><option>Learner Social Club</option><option>Other</option></select></label>
|
||||
<label>How can we help?<textarea name="message" rows="5"></textarea></label>
|
||||
<Button type="submit" disabled aria-describedby="contact-form-note" class="contact-form-card__submit">Submit</Button>
|
||||
<p id="contact-form-note" class="contact-form-card__note">Online submission is not yet connected. Please call <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />.</p>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<style>
|
||||
.contact-form-card {
|
||||
background: white;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 4px 4px 0 rgb(81 81 81 / 4%), 0 4px 16px 0 rgb(81 81 81 / 8%);
|
||||
margin: 0 auto;
|
||||
max-width: 600px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.contact-form-card__title {
|
||||
border-bottom: 1px solid #f1f1f1;
|
||||
margin: 0;
|
||||
padding: 1.2rem 1.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.contact-form-card__fields {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.contact-form-card label {
|
||||
display: grid;
|
||||
font-weight: 700;
|
||||
gap: .4rem;
|
||||
}
|
||||
|
||||
.contact-form-card input,
|
||||
.contact-form-card select,
|
||||
.contact-form-card textarea {
|
||||
background: #fcf9f5;
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: 4px;
|
||||
color: var(--color-primary);
|
||||
font: inherit;
|
||||
padding: .8rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.contact-form-card textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.contact-form-card :global(.contact-form-card__submit) {
|
||||
justify-self: center;
|
||||
max-width: 375px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.contact-form-card__note {
|
||||
color: var(--color-muted);
|
||||
font-size: .9rem;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
interface Props {
|
||||
email?: string;
|
||||
phone?: string;
|
||||
hrefValue?: string;
|
||||
linkText?: string;
|
||||
obfuscatedText?: string;
|
||||
class?: string;
|
||||
id?: string;
|
||||
}
|
||||
|
||||
const {
|
||||
email,
|
||||
phone,
|
||||
hrefValue,
|
||||
linkText,
|
||||
obfuscatedText,
|
||||
class: className,
|
||||
id
|
||||
} = Astro.props;
|
||||
|
||||
if ((email ? 1 : 0) + (phone ? 1 : 0) !== 1) {
|
||||
throw new Error('ContactObfuscation requires exactly one of email or phone.');
|
||||
}
|
||||
|
||||
const contactType = email ? 'email' : 'phone';
|
||||
const sourceValue = email ?? phone ?? '';
|
||||
const linkValue = linkText ?? sourceValue;
|
||||
const fallbackText = obfuscatedText ?? sourceValue;
|
||||
const protocol = email ? 'mailto' : 'tel';
|
||||
const telHrefValue = hrefValue ?? sourceValue.replace(/[^\d+]/g, '');
|
||||
const targetValue = email ? (hrefValue ?? sourceValue) : telHrefValue;
|
||||
const encode = (value: string) => Array.from(value, (character) => character.charCodeAt(0));
|
||||
const encodedTarget = encode(targetValue);
|
||||
const encodedText = encode(linkValue);
|
||||
const spanId = id ?? `${contactType}-obfuscation-${Math.random().toString(36).slice(2, 10)}`;
|
||||
---
|
||||
|
||||
<span id={spanId} class={className}>{fallbackText}</span><script type="text/javascript" define:vars={{ encodedTarget, encodedText, protocol, spanId }}>
|
||||
(() => {
|
||||
const contactSpan = document.getElementById(spanId);
|
||||
|
||||
if (!contactSpan) return;
|
||||
|
||||
const decode = (encodedValue) => encodedValue
|
||||
.map((characterCode) => String.fromCharCode(characterCode))
|
||||
.join('');
|
||||
const target = decode(encodedTarget);
|
||||
const text = decode(encodedText);
|
||||
|
||||
const link = document.createElement('a');
|
||||
link.href = `${protocol}:${target}`;
|
||||
link.textContent = text;
|
||||
|
||||
contactSpan.textContent = '';
|
||||
contactSpan.appendChild(link);
|
||||
})();
|
||||
</script>
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
import ContactObfuscation from './ContactObfuscation.astro';
|
||||
import site from '../data/site.json';
|
||||
const year = new Date().getFullYear();
|
||||
const { lang = 'en' } = Astro.props;
|
||||
@@ -28,13 +29,34 @@ const labels = lang === 'es'
|
||||
</div>
|
||||
<div>
|
||||
<h2>{labels.contact}</h2>
|
||||
<p><a href={`tel:${site.phone.replace(/\D/g, '')}`}>{site.phone}</a><br /><a href={`mailto:${site.email}`}>{site.email}</a><br />{site.address}</p>
|
||||
<p class="social-links">
|
||||
<a href={site.social.facebook} aria-label="Facebook">f</a>
|
||||
<a href={site.social.instagram} aria-label="Instagram">◎</a>
|
||||
<a href={site.social.linkedin} aria-label="LinkedIn">in</a>
|
||||
<a href={site.social.youtube} aria-label="YouTube">▶</a>
|
||||
</p>
|
||||
<div class="footer-contact">
|
||||
<div class="footer-contact-item">
|
||||
<img src="/assets/images/phone-blue.svg" alt="" aria-hidden="true" width="24" height="24" />
|
||||
<ContactObfuscation phone={site.phone} hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />
|
||||
</div>
|
||||
<div class="footer-contact-item">
|
||||
<img src="/assets/images/envelope-blue.svg" alt="" aria-hidden="true" width="24" height="24" />
|
||||
<ContactObfuscation email={site.email} obfuscatedText="moc.msitua4etutitsniza@ofni" />
|
||||
</div>
|
||||
<div class="footer-contact-item">
|
||||
<img src="/assets/images/location-blue.svg" alt="" aria-hidden="true" width="24" height="24" />
|
||||
<address>{site.address}</address>
|
||||
</div>
|
||||
</div>
|
||||
<div class="social-links">
|
||||
<a href={site.social.facebook} target="_blank" rel="noopener" aria-label="Facebook">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" width="30" height="30" fill="var(--color-accent)" aria-hidden="true"><path d="M448 56.7v398.5c0 13.7-11.1 24.7-24.7 24.7H309.1V306.5h58.2l8.7-67.6h-67v-43.2c0-19.6 5.4-32.9 33.5-32.9h35.8v-60.5c-6.2-.8-27.4-2.7-52.2-2.7-51.6 0-87 31.5-87 89.4v49.9h-58.4v67.6h58.4V480H24.7C11.1 480 0 468.9 0 455.3V56.7C0 43.1 11.1 32 24.7 32h398.5c13.7 0 24.8 11.1 24.8 24.7z"/></svg>
|
||||
</a>
|
||||
<a href={site.social.instagram} target="_blank" rel="noopener" aria-label="Instagram">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" width="30" height="30" fill="var(--color-accent)" aria-hidden="true"><path d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"/></svg>
|
||||
</a>
|
||||
<a href={site.social.linkedin} target="_blank" rel="noopener" aria-label="LinkedIn">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" width="30" height="30" fill="var(--color-accent)" aria-hidden="true"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
|
||||
</a>
|
||||
<a href={site.social.youtube} target="_blank" rel="noopener" aria-label="YouTube">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" width="30" height="30" fill="var(--color-accent)" aria-hidden="true"><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container footer-bottom">
|
||||
@@ -42,3 +64,28 @@ const labels = lang === 'es'
|
||||
<p><a href="/privacy-policy">Privacy Policy</a> | <a href="/faqs">FAQ</a></p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<style>
|
||||
.site-footer { background: var(--color-primary-dark); color: white; padding-block: var(--space-xl) var(--space-md); }
|
||||
.footer-grid { display: grid; gap: var(--space-xl); grid-template-columns: 1fr 1fr 1.5fr; }
|
||||
.site-footer h2, .site-footer a { color: white; text-decoration: none; }
|
||||
.site-footer h2 { font-size: 1.25rem; letter-spacing: .3px; margin-bottom: 1.2rem; }
|
||||
.site-footer a:hover { color: var(--color-accent); }
|
||||
.site-footer ul { list-style: none; padding: 0; }
|
||||
.site-footer li { line-height: 2.6; margin-bottom: 0; }
|
||||
.site-footer p { line-height: 2.6; }
|
||||
.footer-contact { display: flex; flex-direction: column; gap: 1rem; margin-bottom: 2rem; margin-top: 2rem; }
|
||||
.footer-contact-item { align-items: flex-start; display: flex; gap: .6rem; line-height: 1.5; }
|
||||
.footer-contact-item img { flex-shrink: 0; }
|
||||
.footer-contact-item address { font-style: normal; }
|
||||
.social-links { display: flex; gap: .85rem; margin-left: 1.6rem; margin-top: .25rem; }
|
||||
.social-links a { align-items: center; color: white; display: flex; opacity: .85; }
|
||||
.social-links a:hover { color: var(--color-accent); opacity: 1; }
|
||||
.footer-bottom { border-top: 1px solid rgb(255 255 255 / 20%); display: flex; justify-content: space-between; margin-top: var(--space-lg); padding-top: var(--space-md); }
|
||||
@media (max-width: 950px) {
|
||||
.footer-grid { grid-template-columns: 1fr; }
|
||||
}
|
||||
@media (max-width: 760px) {
|
||||
.footer-bottom { align-items: flex-start; flex-direction: column; }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
import Button from './Button.astro';
|
||||
import ContactObfuscation from './ContactObfuscation.astro';
|
||||
const { title = 'Schedule Your Free Consultation', showBackground = false } = Astro.props;
|
||||
---
|
||||
<section class:list={['form-section', { 'form-section-background': showBackground }]} aria-labelledby="form-title">
|
||||
@@ -12,8 +14,8 @@ const { title = 'Schedule Your Free Consultation', showBackground = false } = As
|
||||
<label>Phone<input type="tel" name="phone" autocomplete="tel" /></label>
|
||||
<label>Service of interest<select name="service"><option>ABA Therapy</option><option>Autism Evaluation</option><option>Learner Social Club</option><option>Other</option></select></label>
|
||||
<label>How can we help?<textarea name="message" rows="5"></textarea></label>
|
||||
<button class="button" type="submit" disabled aria-describedby="form-note">Submit</button>
|
||||
<p id="form-note" class="form-note">Online submission is not yet connected. Please call (480) 687-7099.</p>
|
||||
<Button type="submit" disabled aria-describedby="form-note">Submit</Button>
|
||||
<p id="form-note" class="form-note">Online submission is not yet connected. Please call <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />.</p>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
import Button from './Button.astro';
|
||||
import LanguageSwitcher from './LanguageSwitcher.astro';
|
||||
import MainNav from './MainNav.astro';
|
||||
import MobileNav from './MobileNav.astro';
|
||||
@@ -21,6 +22,23 @@ const utility = lang === 'es'
|
||||
<MainNav lang={lang} />
|
||||
<MobileNav lang={lang} />
|
||||
<LanguageSwitcher />
|
||||
<a class="button button-small" href="/tour">Tour AIA</a>
|
||||
<Button href="/tour" size="small">Tour AIA</Button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<style>
|
||||
.utility-bar { background: var(--color-primary); color: white; font-size: .85rem; }
|
||||
.utility-inner { align-items: center; display: flex; gap: var(--space-md); justify-content: flex-end; min-height: 38px; }
|
||||
.utility-bar a { color: white; text-decoration: none; }
|
||||
.site-header { background: white; box-shadow: var(--shadow-sm); position: relative; z-index: 5; }
|
||||
.header-inner { align-items: center; display: flex; gap: 1.4rem; min-height: 110px; }
|
||||
.brand img { width: 150px; }
|
||||
@media (max-width: 950px) {
|
||||
.header-inner > :global(.content-button) { display: none; }
|
||||
}
|
||||
@media (max-width: 760px) {
|
||||
.utility-inner { justify-content: center; }
|
||||
.header-inner { min-height: 88px; }
|
||||
.header-inner .lang-switcher { margin-left: auto; }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
interface Props { title: string; eyebrow?: string; description?: string; image?: string; alt?: string; }
|
||||
const { title, eyebrow, description, image, alt = '' } = Astro.props;
|
||||
---
|
||||
<section class="hero">
|
||||
<div class="container hero-grid">
|
||||
<div>
|
||||
{eyebrow && <p class="eyebrow">{eyebrow}</p>}
|
||||
<h1>{title}</h1>
|
||||
{description && <p class="hero-copy">{description}</p>}
|
||||
<a class="button" href="/client-consultation">Get Started</a>
|
||||
</div>
|
||||
{image && <img src={image} alt={alt} loading="eager" />}
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,36 +0,0 @@
|
||||
---
|
||||
import { getEntry } from 'astro:content';
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
import HomeBenefits from './home/HomeBenefits.astro';
|
||||
import HomeDirector from './home/HomeDirector.astro';
|
||||
import HomeEsa from './home/HomeEsa.astro';
|
||||
import HomeFinancialHelp from './home/HomeFinancialHelp.astro';
|
||||
import HomeHero from './home/HomeHero.astro';
|
||||
import HomeInsurance from './home/HomeInsurance.astro';
|
||||
import HomeProcess from './home/HomeProcess.astro';
|
||||
import HomeServicesIntro from './home/HomeServicesIntro.astro';
|
||||
import HomeSkills from './home/HomeSkills.astro';
|
||||
import HomeTestimonials from './home/HomeTestimonials.astro';
|
||||
import type { HomeSection } from '../types/home-sections';
|
||||
|
||||
interface Props { lang?: string }
|
||||
const { lang = 'en' } = Astro.props;
|
||||
const es = lang === 'es';
|
||||
const entry = await getEntry('pages', es ? 'es/index' : 'en/index');
|
||||
if (!entry) throw new Error(`[HomePage] Content entry not found for lang="${lang}". If running in dev, restart the dev server to rebuild the content layer cache.`);
|
||||
const { title, description, canonical, sections = [] } = entry.data;
|
||||
---
|
||||
<BaseLayout {title} {description} {canonical} {lang}>
|
||||
{(sections as HomeSection[]).map((section) => {
|
||||
if (section.type === 'hero') return <HomeHero section={section} />;
|
||||
if (section.type === 'services-intro') return <HomeServicesIntro section={section} />;
|
||||
if (section.type === 'benefits') return <HomeBenefits section={section} />;
|
||||
if (section.type === 'skills') return <HomeSkills section={section} />;
|
||||
if (section.type === 'insurance') return <HomeInsurance section={section} />;
|
||||
if (section.type === 'esa') return <HomeEsa section={section} />;
|
||||
if (section.type === 'financial-help') return <HomeFinancialHelp section={section} />;
|
||||
if (section.type === 'process') return <HomeProcess section={section} />;
|
||||
if (section.type === 'director') return <HomeDirector section={section} />;
|
||||
if (section.type === 'testimonials') return <HomeTestimonials section={section} />;
|
||||
})}
|
||||
</BaseLayout>
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
const logos = ['aetna.png', 'bluecrossblueshield-logo-1.webp', 'logo-ahcccs.webp', 'logo-optum.webp', 'logo-tricare-1.webp', 'united-healthcare-logo-1.webp'];
|
||||
---
|
||||
<section class="insurance-strip" aria-labelledby="insurance-title">
|
||||
<div class="container"><h2 id="insurance-title">Insurance partners</h2><div class="logo-row">{logos.map((logo) => <img src={`/assets/images/${logo}`} alt="" loading="lazy" />)}</div></div>
|
||||
</section>
|
||||
@@ -51,3 +51,15 @@ const activeShort = langMeta[activeCode]?.short ?? 'EN';
|
||||
))}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<style>
|
||||
.lang-switcher { position: relative; }
|
||||
.lang-switcher__trigger { align-items: center; color: var(--color-primary); cursor: pointer; display: flex; font-size: .85rem; font-weight: 700; gap: .35rem; }
|
||||
.lang-switcher__trigger svg { flex-shrink: 0; }
|
||||
.lang-switcher__menu { background: white; box-shadow: var(--shadow-md); display: none; left: 50%; list-style: none; margin: 0; min-width: 110px; padding: .5rem 0 .4rem; position: absolute; top: 100%; transform: translateX(-50%); z-index: 10; }
|
||||
.lang-switcher__menu a { color: rgb(83 83 91); display: block; font-size: .85rem; padding: .4rem .9rem; text-decoration: none; white-space: nowrap; }
|
||||
.lang-switcher__menu a:hover { background: var(--color-primary); color: white; }
|
||||
.lang-switcher__menu a[aria-current="page"] { color: var(--color-accent); font-weight: 700; }
|
||||
.lang-switcher:hover .lang-switcher__menu,
|
||||
.lang-switcher:focus-within .lang-switcher__menu { display: block; }
|
||||
</style>
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
---
|
||||
const { slug } = Astro.props;
|
||||
---
|
||||
<div class="like-view-counter likes-views" data-counter>
|
||||
<button class="like-button" type="button" data-like data-slug={slug} aria-label="Like this article" aria-pressed="false">
|
||||
<span aria-hidden="true">♡</span> <span class="like-count" data-likes>—</span>
|
||||
</button>
|
||||
<span aria-label="Article views">Views: <span class="view-count" data-views>—</span></span>
|
||||
<div class="like-view-counter" data-counter>
|
||||
<span aria-label="Article views"><span class="view-count" data-views>0</span> views</span>
|
||||
<span class="like-group">
|
||||
<span class="like-count" data-likes>—</span>
|
||||
<button class="like-button" type="button" data-like data-slug={slug} aria-label="Like this article" aria-pressed="false">
|
||||
<svg aria-hidden="true" viewBox="0 0 12 10" width="20" height="20" focusable="false" class="like-icon">
|
||||
<path d="m1 4.4c-1-4 2.5-5 4.5-2.5l.5 .6l.5-.6c2-2.5 6-1.5 4.5 2.5q-1 3-5 5q-4-2-5-5z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<script>
|
||||
const apiBase = import.meta.env.PUBLIC_AIA_API_BASE || 'https://api.azinstitute4autism.com';
|
||||
@@ -44,6 +49,14 @@ const { slug } = Astro.props;
|
||||
const views = counter.querySelector<HTMLElement>('[data-views]');
|
||||
if (!button || !slug) return;
|
||||
|
||||
const isLocalhost = ['localhost', '127.0.0.1', '::1'].includes(window.location.hostname);
|
||||
if (isLocalhost) {
|
||||
counter.dataset.unavailable = 'true';
|
||||
if (likes) likes.textContent = '0';
|
||||
if (views) views.textContent = '0';
|
||||
return;
|
||||
}
|
||||
|
||||
const cookieName = `liked_${slug}`;
|
||||
const renderLiked = (liked: boolean) => {
|
||||
button.classList.toggle('liked', liked);
|
||||
@@ -66,7 +79,7 @@ const { slug } = Astro.props;
|
||||
} catch {
|
||||
counter.dataset.unavailable = 'true';
|
||||
if (likes) likes.textContent = '0';
|
||||
if (views) views.textContent = '—';
|
||||
if (views) views.textContent = '0';
|
||||
}
|
||||
|
||||
button.addEventListener('click', async () => {
|
||||
@@ -96,3 +109,14 @@ const { slug } = Astro.props;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.like-view-counter { align-items: center; border-top: 1px solid var(--color-border); display: flex; gap: var(--space-lg); font-size: .75rem; margin-block: var(--space-xl); padding-top: var(--space-md); }
|
||||
.like-view-counter { font-size: .8rem; }
|
||||
.like-group { align-items: center; display: inline-flex; gap: .35rem; }
|
||||
.like-view-counter button { align-items: center; background: white; border: none; color: inherit; display: inline-flex; gap: 0; padding: 0; }
|
||||
.like-view-counter .like-count { color: var(--color-text); min-width: 1ch; }
|
||||
.like-view-counter .like-icon { fill: none; flex: 0 0 auto; stroke: #d92d20; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.6; }
|
||||
.like-view-counter button.liked .like-icon { fill: #d92d20; stroke: #d92d20; }
|
||||
.like-view-counter button:disabled { cursor: wait; opacity: .65; }
|
||||
</style>
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
interface Props {
|
||||
href: string;
|
||||
variant?: 'default' | 'strong';
|
||||
target?: '_blank' | '_self';
|
||||
rel?: string;
|
||||
class?: string;
|
||||
}
|
||||
|
||||
const {
|
||||
href,
|
||||
variant = 'default',
|
||||
target,
|
||||
rel = target === '_blank' ? 'noopener noreferrer' : undefined,
|
||||
class: className
|
||||
} = Astro.props;
|
||||
---
|
||||
|
||||
<a
|
||||
class:list={['content-link', { 'content-link--strong': variant === 'strong' }, className]}
|
||||
href={href}
|
||||
target={target}
|
||||
rel={rel}
|
||||
>
|
||||
<slot />
|
||||
</a>
|
||||
|
||||
<style>
|
||||
.content-link {
|
||||
color: var(--color-accent-strong);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.content-link:hover,
|
||||
.content-link:focus-visible {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
|
||||
.content-link--strong {
|
||||
font-weight: 700;
|
||||
}
|
||||
</style>
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
const { title = 'Scottsdale', address = '8901 E Raintree Dr Ste 160, Scottsdale, AZ 85260' } = Astro.props;
|
||||
---
|
||||
<article class="card location-card"><h3>{title}</h3><p>{address}</p><a class="text-link" href={`https://maps.google.com/?q=${encodeURIComponent(address)}`}>Get directions</a></article>
|
||||
@@ -22,3 +22,19 @@ const aboutLinks = lang === 'es'
|
||||
))}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<style>
|
||||
.main-nav { margin-inline: auto; }
|
||||
.main-nav ul { display: flex; gap: 1.4rem; list-style: none; margin: 0; padding: 0; }
|
||||
.main-nav li { position: relative; }
|
||||
.main-nav a { color: var(--color-primary); font-size: .9rem; text-decoration: none; }
|
||||
.main-nav a:hover { color: var(--color-accent-strong); }
|
||||
.main-nav .submenu { background: white; box-shadow: var(--shadow-md); display: none; gap: 0; left: -1rem; min-width: 180px; padding: .75rem 0; position: absolute; top: 100%; }
|
||||
.main-nav .submenu a { display: block; padding: .45rem 1rem; }
|
||||
.main-nav li:hover > .submenu, .main-nav li:focus-within > .submenu { display: block; }
|
||||
@media (max-width: 950px) {
|
||||
.main-nav { display: none; }
|
||||
:global(.mobile-nav) .main-nav { display: block; }
|
||||
:global(.mobile-nav) .main-nav ul { align-items: flex-start; flex-direction: column; padding: var(--space-md); }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -6,3 +6,10 @@ const { lang = 'en' } = Astro.props;
|
||||
<summary>Menu</summary>
|
||||
<MainNav lang={lang} />
|
||||
</details>
|
||||
|
||||
<style>
|
||||
.mobile-nav { display: none; }
|
||||
@media (max-width: 950px) {
|
||||
.mobile-nav { display: block; }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
interface Props {
|
||||
title: string;
|
||||
subtitle?: string;
|
||||
image?: string;
|
||||
eyebrow?: string;
|
||||
constrain?: boolean;
|
||||
}
|
||||
const { title, subtitle, image, eyebrow, constrain = false } = Astro.props;
|
||||
---
|
||||
|
||||
<header class:list={['page-hero', { 'page-hero--image': image, 'page-hero--constrained': image && constrain }]} style={image ? `--hero-image: url("${image}")` : undefined}>
|
||||
<div class="container">
|
||||
<div class="page-hero__heading">
|
||||
{eyebrow
|
||||
? <div class="page-hero__copy"><p class="eyebrow">{eyebrow}</p><h1>{title}</h1>{subtitle && <h2>{subtitle}</h2>}</div>
|
||||
: <><h1>{title}</h1>{subtitle && <h2>{subtitle}</h2>}</>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<style>
|
||||
.page-hero { background: var(--color-tint); padding-block: 4rem; text-align: center; }
|
||||
.page-hero__heading { display: inline-block; }
|
||||
.page-hero h1 { margin: 0; }
|
||||
.page-hero h2 { color: var(--color-primary); font-family: var(--font-heading); font-size: clamp(2rem, 4vw, 2.5rem); font-weight: 400; line-height: 1.15; margin: .5rem 0 0; }
|
||||
.page-hero--image { background-image: var(--hero-image); background-position: center; background-repeat: no-repeat; background-size: cover; max-height: 420px; padding-block: 0; text-align: left; }
|
||||
.page-hero--image > .container { padding-block: 10rem; }
|
||||
.page-hero--image h1 { max-width: 600px; }
|
||||
.page-hero--image h2 { max-width: 600px; }
|
||||
.page-hero__copy { max-width: 600px; }
|
||||
.page-hero--constrained { background-image: var(--hero-image), linear-gradient(var(--color-tint), var(--color-tint)); background-clip: content-box, border-box; background-origin: content-box, border-box; background-position: center, center; background-repeat: no-repeat, repeat; background-size: cover, auto; padding-inline: max(0px, calc((100% - var(--container-w)) / 2)); }
|
||||
@media (max-width: 760px) {
|
||||
.page-hero__heading { background: #fffb; padding: 2rem; }
|
||||
.page-hero--image > .container { padding-block: 6.25rem; }
|
||||
.page-hero--image { text-align: center; }
|
||||
.page-hero--image h1, .page-hero--image h2, .page-hero__copy { margin-inline: auto; }
|
||||
}
|
||||
</style>
|
||||
@@ -6,12 +6,23 @@ interface Props {
|
||||
image?: string;
|
||||
lang?: string;
|
||||
type?: 'website' | 'article';
|
||||
robots?: string;
|
||||
}
|
||||
const { title, description = '', canonical, image, lang = 'en', type = 'website' } = Astro.props;
|
||||
const {
|
||||
title,
|
||||
description = '',
|
||||
canonical,
|
||||
image,
|
||||
lang = 'en',
|
||||
type = 'website',
|
||||
robots
|
||||
} = Astro.props;
|
||||
const defaultRobots = import.meta.env.PUBLIC_ALLOW_INDEXING === 'true' ? 'index,follow' : 'noindex,nofollow';
|
||||
const absoluteImage = image ? new URL(image, Astro.site ?? Astro.url).href : undefined;
|
||||
---
|
||||
<title>{title}</title>
|
||||
<meta name="description" content={description} />
|
||||
<meta name="robots" content={robots ?? defaultRobots} />
|
||||
{canonical && <link rel="canonical" href={canonical} />}
|
||||
<meta property="og:type" content={type} />
|
||||
<meta property="og:title" content={title} />
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
---
|
||||
const { title, description, href, image } = Astro.props;
|
||||
---
|
||||
<article class="card service-card">
|
||||
{image && <img src={image} alt="" loading="lazy" />}
|
||||
<div class="card-body"><h3><a href={href}>{title}</a></h3><p>{description}</p><a class="text-link" href={href}>Learn more</a></div>
|
||||
</article>
|
||||
@@ -49,3 +49,18 @@ const { image, alt, videoUrl, videoTitle } = Astro.props;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.video-card { background: none; border: none; cursor: pointer; display: block; padding: 0; position: relative; }
|
||||
.video-card img { width: 100%; }
|
||||
.video-card span { align-items: center; background: var(--color-accent); border-radius: 50%; color: white; display: flex; height: 64px; justify-content: center; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 64px; z-index: 1; }
|
||||
.video-card::before, .video-card::after { animation-duration: 3s; animation-iteration-count: infinite; animation-name: video-ripple; animation-timing-function: cubic-bezier(.65, 0, .34, 1); border: 8px solid var(--color-accent); border-radius: 50%; content: ""; height: 64px; left: 50%; opacity: 0; position: absolute; top: 50%; width: 64px; }
|
||||
.video-card::before { animation-delay: .5s; }
|
||||
.video-dialog { background: none; border: none; box-sizing: border-box; max-width: min(90vw, 900px); padding: 1rem 1rem 0 0; width: 100%; }
|
||||
.video-dialog::backdrop { background: rgba(0, 0, 0, .85); }
|
||||
.video-dialog-inner { position: relative; }
|
||||
.video-dialog-frame { aspect-ratio: 16 / 9; width: 100%; }
|
||||
.video-dialog-frame iframe { border: none; height: 100%; width: 100%; }
|
||||
.video-dialog-close { background: white; border: none; border-radius: 50%; cursor: pointer; font-size: 1rem; height: 2rem; line-height: 2rem; position: absolute; right: -1rem; top: -1rem; width: 2rem; }
|
||||
@keyframes video-ripple { 0% { opacity: 1; transform: translate(-50%, -50%) scale3d(.75, .75, 1); } to { opacity: 0; transform: translate(-50%, -50%) scale3d(1.5, 1.5, 1); } }
|
||||
</style>
|
||||
|
||||
@@ -11,7 +11,7 @@ const { section } = Astro.props;
|
||||
}
|
||||
</style>
|
||||
|
||||
<section class="section cream-section">
|
||||
<section class="section section-tint">
|
||||
<div class="container feature-grid benefit-grid">
|
||||
<div>
|
||||
<h2>{section.heading}</h2>
|
||||
|
||||
@@ -11,7 +11,7 @@ const { section } = Astro.props;
|
||||
}
|
||||
</style>
|
||||
|
||||
<section class="section cream-section">
|
||||
<section class="section section-tint">
|
||||
<div class="container feature-grid esa-grid">
|
||||
<div>
|
||||
<h2>{section.heading}</h2>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
import Button from '../Button.astro';
|
||||
import type { FinancialHelpSection } from '../../types/home-sections';
|
||||
interface Props { section: FinancialHelpSection }
|
||||
const { section } = Astro.props;
|
||||
@@ -7,6 +8,6 @@ const { section } = Astro.props;
|
||||
<div class="container">
|
||||
<h2>{section.heading}</h2>
|
||||
<p>{section.body}</p>
|
||||
<a class="button" href={section.cta.href}>{section.cta.label}</a>
|
||||
<Button href={section.cta.href}>{section.cta.label}</Button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
import Button from '../Button.astro';
|
||||
import type { HeroSection } from '../../types/home-sections';
|
||||
interface Props { section: HeroSection }
|
||||
const { section } = Astro.props;
|
||||
@@ -6,10 +7,10 @@ const { section } = Astro.props;
|
||||
<section class="home-hero">
|
||||
<div class="container home-hero-grid">
|
||||
<div>
|
||||
<p class="script-label">{section.eyebrow}</p>
|
||||
<p class="eyebrow">{section.eyebrow}</p>
|
||||
<h1 set:html={section.heading} />
|
||||
<p>{section.body}</p>
|
||||
<a class="button" href={section.cta.href}>{section.cta.label}</a>
|
||||
<Button href={section.cta.href}>{section.cta.label}</Button>
|
||||
</div>
|
||||
<img src={`/assets/images/${section.image}`} alt={section.imageAlt} loading="eager" />
|
||||
</div>
|
||||
@@ -19,7 +20,7 @@ const { section } = Astro.props;
|
||||
.home-hero { background: var(--color-tint); overflow: hidden; }
|
||||
.home-hero-grid { align-items: end; display: grid; grid-template-columns: 1fr .9fr; min-height: 520px; padding-top: 4rem; }
|
||||
.home-hero-grid > div { align-self: center; padding-bottom: 4rem; }
|
||||
.home-hero-grid p:not(.script-label) { max-width: 570px; }
|
||||
.home-hero-grid p:not(.eyebrow) { max-width: 570px; }
|
||||
.home-hero-grid img { align-self: end; justify-self: end; max-height: 500px; object-fit: contain; }
|
||||
@media (max-width: 760px) {
|
||||
.home-hero-grid { grid-template-columns: 1fr; padding-top: 3rem; text-align: center; }
|
||||
|
||||
@@ -4,8 +4,47 @@ interface Props { section: InsuranceSection }
|
||||
const { section } = Astro.props;
|
||||
---
|
||||
<style>
|
||||
.insurance-section .logo-row { margin-top: 2rem; }
|
||||
.logo-row img { filter: none; }
|
||||
.insurance-section .logo-row {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.insurance-section .logo-row img {
|
||||
flex: 0 1 auto;
|
||||
max-width: 200px;
|
||||
}
|
||||
|
||||
@media (min-width: 640px) {
|
||||
.insurance-section .logo-row {
|
||||
display: grid;
|
||||
gap: var(--space-lg);
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
align-items: center;
|
||||
justify-items: center;
|
||||
}
|
||||
|
||||
.insurance-section .logo-row img {
|
||||
flex: 0 1 auto;
|
||||
max-width: 25vw;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.insurance-section .logo-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.insurance-section .logo-row img {
|
||||
flex-basis: 0;
|
||||
flex-grow: 1;
|
||||
max-width: 120px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<section class="section insurance-section">
|
||||
|
||||
@@ -3,7 +3,7 @@ import type { ProcessSection } from '../../types/home-sections';
|
||||
interface Props { section: ProcessSection }
|
||||
const { section } = Astro.props;
|
||||
---
|
||||
<section class="section cream-section process-section">
|
||||
<section class="section section-tint process-section">
|
||||
<div class="container">
|
||||
<h2>{section.heading}</h2>
|
||||
<div class="process-grid">
|
||||
@@ -17,6 +17,17 @@ const { section } = Astro.props;
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.process-section h2 { text-align: center; }
|
||||
.process-grid { display: grid; gap: 1rem; grid-template-columns: repeat(3, 1fr); margin-top: 2.5rem; }
|
||||
.process-grid div { background: white; min-height: 190px; padding: 3.2rem 1rem; position: relative; text-align: center; transition: transform .3s ease-in-out; }
|
||||
.process-grid div:hover { transform: scale(1.05); z-index: 1; }
|
||||
.process-grid img { margin: 0 auto 1rem; width: 42%; }
|
||||
@media (max-width: 760px) {
|
||||
.process-grid { grid-template-columns: 1fr 1fr; }
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
function equalizeProcessCards() {
|
||||
const cards = [...document.querySelectorAll('.process-grid > div')] as HTMLElement[];
|
||||
@@ -24,6 +35,8 @@ const { section } = Astro.props;
|
||||
const max = Math.max(...cards.map(c => c.offsetHeight));
|
||||
if (max > 0) cards.forEach(c => (c.style.height = `${max}px`));
|
||||
}
|
||||
equalizeProcessCards();
|
||||
window.addEventListener('resize', equalizeProcessCards);
|
||||
document.fonts.ready.then(() => {
|
||||
equalizeProcessCards();
|
||||
window.addEventListener('resize', equalizeProcessCards);
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
import Button from '../Button.astro';
|
||||
import type { ServicesIntroSection } from '../../types/home-sections';
|
||||
interface Props { section: ServicesIntroSection }
|
||||
const { section } = Astro.props;
|
||||
@@ -31,7 +32,7 @@ const { section } = Astro.props;
|
||||
<div>
|
||||
<h2 class="no-balance">{section.commitmentsHeading}</h2>
|
||||
<ul class="source-list two-column-list">{section.commitments.map((item) => <li>{item}</li>)}</ul>
|
||||
<a class="button" href={section.commitmentsCta.href}>{section.commitmentsCta.label}</a>
|
||||
<Button href={section.commitmentsCta.href}>{section.commitmentsCta.label}</Button>
|
||||
</div>
|
||||
<img class="gear-photo gear-photo-right" src={`/assets/images/${section.commitmentsImage}`} alt={section.commitmentsImageAlt} />
|
||||
</div>
|
||||
|
||||
@@ -3,7 +3,7 @@ import type { TestimonialsSection } from '../../types/home-sections';
|
||||
interface Props { section: TestimonialsSection }
|
||||
const { section } = Astro.props;
|
||||
---
|
||||
<section class="section cream-section testimonial-section">
|
||||
<section class="section section-tint testimonial-section">
|
||||
<div class="container">
|
||||
<h2>{section.heading}</h2>
|
||||
<div class="testimonial-swiper swiper">
|
||||
@@ -50,3 +50,14 @@ const { section } = Astro.props;
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.testimonial-section h2 { text-align: center; }
|
||||
.testimonial-section blockquote { margin: 0 auto; max-width: 720px; padding: 0 2rem; text-align: center; }
|
||||
.testimonial-author { font-size: 1.25rem; font-weight: 700; margin-bottom: .5rem; }
|
||||
.testimonial-swiper { --swiper-pagination-bullet-horizontal-gap: 1vw; padding-bottom: 3rem !important; }
|
||||
.testimonial-swiper .swiper-pagination-bullet { background-color: var(--color-accent); opacity: 1; }
|
||||
.testimonial-swiper .swiper-pagination-bullet-active { background-color: var(--color-accent-strong); }
|
||||
.testimonial-swiper .swiper-button-next, .testimonial-swiper .swiper-button-prev { color: var(--color-accent); }
|
||||
.testimonial-swiper .swiper-button-next:hover, .testimonial-swiper .swiper-button-prev:hover { color: var(--color-accent-strong); }
|
||||
</style>
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
---
|
||||
<div class="about-page">
|
||||
<section class="about-section section">
|
||||
<div class="container">
|
||||
<h2>Our Story</h2>
|
||||
<p>The Arizona Institute for Autism (AIA) was founded in 2018 by Clinical Director Rula Diab, M.Ed, BCBA, LBA. Ms. Diab is an industry expert with over 15 years of experience in the field of Special Education and Behavioral Analysis.</p>
|
||||
<p>As the founder and Clinical Director, Rula Diab, leads the Arizona Institute for Autism's clinical efforts, community outreach, and managing network programming with current local businesses including Arizona State University and Phoenix School District. As a Special Education expert, Ms. Diab works with practitioners, academics, policymakers, teachers, families, and, most importantly, children with developmental disabilities throughout Arizona. After noticing gaps in the way practitioners applied ABA principles, Rula pioneered the AIA model of education, a model centered on recognizing each child's individuality and dignity by cultivating their natural interests, preferences, and motivators. Education doesn't have to be boring, and that should be the case for all children.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="about-section section section-tint">
|
||||
<div class="container">
|
||||
<h2>Our Mission</h2>
|
||||
<p>At AIA, our mission is to improve special education and strengthen communities throughout Arizona. Every day, our team of highly trained clinicians, paraprofessionals, educators, and consultants works with one goal in mind: to support the behavioral and educational development of our 'kiddos' in every way possible.</p>
|
||||
<p>We accomplish this by delivering clinical treatments, including ABA therapy services, and educational support to children with Autism Spectrum Disorder and other developmental disorders. And since every child is unique, we work with each family differently to understand their individual needs before we apply our insights through customized programs.</p>
|
||||
<p>We also bring our 'can-do' mentality to the classroom. AIA works hand-in-hand with SPED teachers and school leaders to address their unique challenges and enhance the classroom environment for their students. Our staff believes that, with the right resources & support, every child can achieve their potential. So, every day, we do everything we can to support each one of our 'kiddos' in the pursuit of their individual potential.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="about-section section">
|
||||
<div class="container">
|
||||
<h2>Our Commitment</h2>
|
||||
<ul class="commitment-list">
|
||||
<li><strong>Integrity</strong> — Integrity is the essence of who we are and at the foundation of everything we do. We approach our relationships with integrity and always adhere to the highest ethical principles.</li>
|
||||
<li><strong>Empowerment</strong> — A heart that serves and empowers others is essential to our success. We are passionate about motivating and encouraging our kiddos and learners for success.</li>
|
||||
<li><strong>Excellence</strong> — At AIA, we strive for excellence in everything we do. We go above and beyond in providing results to support our community partners, customers, kiddos, and everyone in the AIA family.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.about-section h2 { margin-top: 0; }
|
||||
.about-section p { max-width: 820px; }
|
||||
.commitment-list { list-style: none; max-width: 820px; padding: 0; }
|
||||
.commitment-list li { border-left: 4px solid var(--color-accent); margin-bottom: 1.5rem; padding-left: 1.25rem; }
|
||||
.commitment-list li:last-child { margin-bottom: 0; }
|
||||
</style>
|
||||
@@ -0,0 +1,246 @@
|
||||
---
|
||||
import Button from '../Button.astro';
|
||||
const indeedUrl = 'https://www.indeed.com/cmp/Arizona-Institute-For-Autism/jobs';
|
||||
|
||||
const benefits = [
|
||||
'Competitive Salary', 'Giveback Opportunity', 'Medical Insurance Plan',
|
||||
'Dental Life Insurance Plan', 'Vision Insurance Plan', 'Life Insurance Plan',
|
||||
'401 K', 'Vacation Time', 'Sick Time',
|
||||
];
|
||||
|
||||
const culture = [
|
||||
'Family-Oriented', 'Supportive', 'Educational',
|
||||
'Motivating', 'Transparent', 'Inclusive',
|
||||
];
|
||||
|
||||
const careerPath = [
|
||||
'Behavioral Technician', 'Registered Behavioral Technician (RBT)', 'Senior Behavioral Technician, RBT',
|
||||
'Clinical Case Supervisor', 'BCBA (Board Certified Behavioral Analyst)', 'Clinical Assistant Director, BCBA', 'Clinical Director, BCBA',
|
||||
];
|
||||
|
||||
const benefitIcons = [
|
||||
['competitive-compensation_blue.svg', 'Competitive\nCompensation'],
|
||||
['flexible-scheduling_blue.svg', 'Flexible\nScheduling'],
|
||||
['caseload-teamwork_blue.svg', 'Caseload\nTeamwork'],
|
||||
['career-growth_blue.svg', 'Career\nGrowth'],
|
||||
['monthly-training_blue.svg', 'Monthly\nTraining'],
|
||||
['diversity-inclusion-opportunity_blue.svg', 'Diversity & Inclusive\nOpportunities'],
|
||||
];
|
||||
|
||||
const careerCards = [
|
||||
{ image: 'clinical-careers.webp', title: 'Clinical', body: "Bring your specialized knowledge to the clinical team. You'll get the training tools you need to serve a community you'll love." },
|
||||
{ image: 'non-clinical-careers.webp', title: 'Non-Clinical', body: "Build a career you love as a member of our non-clinical team. In this role, you'll service team members, families, and the community while ensuring quality service." },
|
||||
{ image: 'corporate-center-team-support.webp', title: 'Center Support', body: 'Take a fresh and innovative approach as a member of the Corporate team. Take on new challenges and opportunities to help shape the future of Pediatric care.' },
|
||||
{ image: 'internships-practicum.webp', title: 'Internships', body: 'Our specialty interns help shape the future of our center carefully curated clinical, operations, advocacy, people, and other departments.' },
|
||||
];
|
||||
---
|
||||
|
||||
<article class="careers-page">
|
||||
|
||||
<!-- Join the AIA Team -->
|
||||
<section class="careers-intro container-narrow">
|
||||
<h2>Join the AIA Team</h2>
|
||||
<p>Apply to join the Arizona Institute for Autism (AIA) team today. We are on a mission to improve special education and strengthen communities throughout Arizona.</p>
|
||||
<p>Our talented and passionate employees are a critical piece to the high-quality Autism services we provide along with our commitment to behavioral health, school solutions, and community outreach.</p>
|
||||
<Button href={indeedUrl} target="_blank" center>View Open Positions</Button>
|
||||
</section>
|
||||
|
||||
<!-- Our Benefits -->
|
||||
<section class="careers-section section-tint">
|
||||
<div class="container careers-split">
|
||||
<div class="careers-split__text">
|
||||
<h3>Our Benefits</h3>
|
||||
<ul>
|
||||
{benefits.map((b) => <li>{b}</li>)}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="careers-split__images">
|
||||
<img src="/assets/images/integrated-aba-model_400x300.webp" alt="Integrated ABA model" loading="lazy" />
|
||||
<img src="/assets/images/proud-aia-staff.webp" alt="Compassionate AIA staff members" loading="lazy" />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Our Diverse Culture -->
|
||||
<section class="careers-section">
|
||||
<div class="container careers-split">
|
||||
<div class="careers-split__text">
|
||||
<h3>Our Diverse Culture</h3>
|
||||
<ul>
|
||||
{culture.map((c) => <li>{c}</li>)}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="careers-split__images">
|
||||
<img src="/assets/images/toddler-bcba-support.webp" alt="Toddler with BCBA support" loading="lazy" />
|
||||
<img src="/assets/images/aba-learn-play-skills.webp" alt="ABA learn and play skills" loading="lazy" />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- See Your Impact -->
|
||||
<section class="careers-section section-tint">
|
||||
<div class="container careers-two-col">
|
||||
<div>
|
||||
<h3>See Your Impact</h3>
|
||||
<p>The work we do has a direct impact on our learners, families, our communities, our team members, and the healthcare industry.</p>
|
||||
<p>Every day you'll work with others driven to make a difference through transforming primary autism and pediatric care.</p>
|
||||
</div>
|
||||
<img src="/assets/images/scottsdale-ribbon-cutting.webp" alt="Scottsdale location ribbon-cutting ceremony" loading="lazy" />
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Expand & Explore -->
|
||||
<section class="careers-section container-narrow">
|
||||
<h3>Expand & Explore Your Potential</h3>
|
||||
<p>We're growing fast, and that makes us a great place for you to grow. Focus on learning, discovering, and trying new areas that interest you. Advance in your chosen field. We'll help you get there.</p>
|
||||
</section>
|
||||
|
||||
<!-- Scholarships GCU -->
|
||||
<section class="careers-section section-tint">
|
||||
<div class="container">
|
||||
<div>
|
||||
<h3>Scholarships Awarded in Partnership with GCU</h3>
|
||||
<p>Through AIA's partnership with GCU, all AIA employees, along with their spouses and dependents, are eligible for a tuition discount when they enroll in one of GCU's programs.</p>
|
||||
<img class="logo-img" src="/assets/images/logo-gcu.webp" alt="Grand Canyon University logo" loading="lazy" />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- BCBA Internships -->
|
||||
<section class="careers-section container-narrow">
|
||||
<h3>Build Your Resume with BCBA Internships & Practicum</h3>
|
||||
<p>At the Arizona Institute for Autism, we afford students at Arizona State University to gain practicum experience. Due to our partnership with the Arizona State University Department of Psychology, future Board Certified Behavior Analysts will meet the training requirements of the ASU Department of Psychology MS ABA Program and the BACB.</p>
|
||||
<p>Students will be given the opportunity to obtain thorough behavior-analytic experience and training in a fashion that fulfills its service provision related functions as an organization, so long as those functions are analytic in nature and the goals of the practicum experience are in accordance with the Behavior Analyst Certification Board.</p>
|
||||
<img class="logo-img" src="/assets/images/asu.webp" alt="Arizona State University" loading="lazy" />
|
||||
</section>
|
||||
|
||||
<!-- Choose Your Clinical Career Path -->
|
||||
<section class="careers-section section-tint">
|
||||
<div class="container">
|
||||
<h2>Choose Your Clinical Career Path</h2>
|
||||
<p>Work someone you love. Begin your journey with Arizona's leading ABA Integrated Therapy provider today!</p>
|
||||
<div class="careers-split">
|
||||
<div class="careers-split__text">
|
||||
<ul>
|
||||
{careerPath.map((p) => <li>{p}</li>)}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="careers-split__images">
|
||||
<img src="/assets/images/casp-member-logo.webp" alt="The Council of Autism Service Providers member logo" loading="lazy" />
|
||||
<img src="/assets/images/logo-BACB.png" alt="BACB logo" loading="lazy" />
|
||||
</div>
|
||||
</div>
|
||||
<Button href={indeedUrl} target="_blank" center>View Open Positions</Button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Benefits of Working at AIA -->
|
||||
<section class="careers-section careers-center">
|
||||
<div class="container">
|
||||
<h3>Benefits of Working at Arizona Institute for Autism</h3>
|
||||
<div class="benefits-grid">
|
||||
{benefitIcons.map(([icon, label]) => (
|
||||
<div class="benefit-item">
|
||||
<img src={`/assets/images/${icon}`} alt={label.replace('\n', ' ')} width="80" height="80" loading="lazy" />
|
||||
<p>{label.split('\n').map((line, i) => i > 0 ? [<br />, line] : line)}</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Your Clinical Path to Success -->
|
||||
<section class="careers-section section-tint">
|
||||
<div class="container-narrow careers-path">
|
||||
<h2>Your Clinical Path to Success</h2>
|
||||
<p>Behavioral Technician → Registered Behavioral Technician → Senior Behavioral Technician</p>
|
||||
<p>Clinical Case Supervisor → BCBA → Clinical Assistant Director → Clinical Director</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Find Your Path -->
|
||||
<section class="careers-section">
|
||||
<div class="container careers-center">
|
||||
<h3>Find Your Path</h3>
|
||||
<p>If you have an interest, we have a department for you to step into and teams to support you in your growth.</p>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="career-cards">
|
||||
{careerCards.map(({ image, title, body }) => (
|
||||
<div class="career-card">
|
||||
<img src={`/assets/images/${image}`} alt={title} loading="lazy" />
|
||||
<div class="career-card__body">
|
||||
<h4>{title}</h4>
|
||||
<p>{body}</p>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<Button href={indeedUrl} target="_blank" center>View Open Positions</Button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</article>
|
||||
|
||||
<style>
|
||||
/* ── Shared ─────────────────────────────────────────── */
|
||||
.careers-intro { padding-block: 3rem; }
|
||||
.careers-section { padding-block: 3rem; }
|
||||
.careers-section.container-narrow { max-width: 760px; margin-inline: auto; padding-inline: 1rem; }
|
||||
.careers-center { text-align: center; }
|
||||
|
||||
/* ── Two-column split: 50% text + 25%+25% images ───── */
|
||||
.careers-split { display: grid; gap: 2rem; grid-template-columns: 1fr 1fr; align-items: center; }
|
||||
.careers-split__images { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
|
||||
.careers-split__images img { width: 100%; height: auto; border-radius: 4px; }
|
||||
.careers-split__text h3 { margin-top: 0; }
|
||||
.careers-split__text ul { padding-left: 1.25rem; }
|
||||
.careers-split__text ul li { margin-bottom: .4rem; }
|
||||
|
||||
/* ── Two-column 50/50 ───────────────────────────────── */
|
||||
.careers-two-col { display: grid; gap: 2rem; grid-template-columns: 1fr 1fr; align-items: center; }
|
||||
.careers-two-col h3 { margin-top: 0; }
|
||||
.careers-two-col img { width: 100%; height: auto; border-radius: 4px; }
|
||||
.careers-two-col--logo { align-items: center; }
|
||||
.logo-img { display: block; max-width: 100%; height: auto; margin-top: 2rem; margin-inline: auto; }
|
||||
|
||||
/* ── Benefits icon grid ─────────────────────────────── */
|
||||
.benefits-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 1rem; margin-top: 2rem; text-align: center; }
|
||||
.benefit-item img { display: block; margin: 0 auto .75rem; }
|
||||
.benefit-item p { font-size: .75rem; line-height: 1.4; margin: 0; }
|
||||
|
||||
/* ── Clinical path ──────────────────────────────────── */
|
||||
.careers-path { text-align: center; }
|
||||
.careers-path h2 { margin-bottom: 1rem; }
|
||||
.careers-path p { font-size: 1rem; margin-bottom: .5rem; }
|
||||
|
||||
/* ── Find Your Path ─────────────────────────────────── */
|
||||
.career-cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.5rem; padding-block: 1rem; }
|
||||
.career-card { display: flex; flex-direction: column; isolation: isolate; text-align: center; }
|
||||
.career-card img { display: block; margin-inline: auto; object-fit: cover; }
|
||||
.career-card__body { flex: 1;
|
||||
background: var(--color-tint);
|
||||
border-radius: 0 0 4px 4px;
|
||||
margin-top: -2.4rem;
|
||||
padding: 2.4rem 1rem 1.25rem;
|
||||
position: relative;
|
||||
z-index: -1;
|
||||
}
|
||||
.career-card__body h4 { font-size: 1.25rem; margin: 0 0 .4rem; }
|
||||
.career-card__body p { font-size: .8rem; margin: 0; }
|
||||
|
||||
/* ── CTA ────────────────────────────────────────────── */
|
||||
.careers-cta { padding-block: 3rem; text-align: center; }
|
||||
|
||||
/* ── Responsive ─────────────────────────────────────── */
|
||||
@media (max-width: 900px) {
|
||||
.careers-split, .careers-two-col { grid-template-columns: 1fr; }
|
||||
.careers-split__images { grid-template-columns: 1fr; }
|
||||
.career-cards { grid-template-columns: repeat(2, 1fr); }
|
||||
.benefits-grid { grid-template-columns: repeat(3, 1fr); }
|
||||
}
|
||||
@media (max-width: 540px) {
|
||||
.career-cards { grid-template-columns: 1fr; }
|
||||
.benefits-grid { grid-template-columns: repeat(2, 1fr); }
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,111 @@
|
||||
---
|
||||
import ContactForm from '../ContactForm.astro';
|
||||
|
||||
interface Props {
|
||||
title: string;
|
||||
}
|
||||
|
||||
const { title } = Astro.props;
|
||||
---
|
||||
|
||||
<section class="contact-page">
|
||||
<div class="container contact-page__grid">
|
||||
<div class="contact-page__copy">
|
||||
<slot />
|
||||
</div>
|
||||
<ContactForm title={title} />
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="contact-map-section" aria-label="Map showing Arizona Institute for Autism in Scottsdale">
|
||||
<div id="aia-contact-map" class="contact-map"></div>
|
||||
</section>
|
||||
|
||||
<script is:inline src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
|
||||
<script is:inline>
|
||||
(() => {
|
||||
const mapElement = document.getElementById('aia-contact-map');
|
||||
|
||||
if (!mapElement || !window.L) return;
|
||||
|
||||
const map = window.L.map(mapElement).setView([33.63, -111.88756], 12);
|
||||
const tiles = window.L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',
|
||||
maxZoom: 19
|
||||
});
|
||||
|
||||
tiles.on('tileload', (event) => {
|
||||
if (event.tile && !event.tile.alt) {
|
||||
event.tile.alt = 'OpenStreetMap tile showing area around Arizona Institute for Autism in Scottsdale, AZ';
|
||||
}
|
||||
});
|
||||
|
||||
tiles.addTo(map);
|
||||
|
||||
window.L.marker([33.617746, -111.88756]).addTo(map).bindPopup(`
|
||||
<span style="display:block;text-align:center">
|
||||
<b>Arizona Institute for Autism</b><br>
|
||||
<img alt="Arizona Institute for Autism" src="/assets/images/aia-logo.svg" width="94">
|
||||
</span>
|
||||
`).openPopup();
|
||||
})();
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.contact-page {
|
||||
background: white;
|
||||
padding-block: 100px;
|
||||
}
|
||||
|
||||
.contact-page__grid {
|
||||
align-items: start;
|
||||
display: grid;
|
||||
gap: clamp(2rem, 5vw, 4rem);
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.contact-page__copy {
|
||||
color: var(--color-primary);
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.contact-page__copy :global(h2) {
|
||||
margin: 0 0 25px;
|
||||
}
|
||||
|
||||
.contact-page__copy :global(p) {
|
||||
margin: 0 0 25px;
|
||||
}
|
||||
|
||||
.contact-page__copy :global(.content-button) {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.contact-map-section {
|
||||
background: white;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.contact-map {
|
||||
height: 360px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media (max-width: 992px) {
|
||||
.contact-page {
|
||||
padding-block: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.contact-page__grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.contact-page__copy :global(.content-button) {
|
||||
display: table;
|
||||
margin-inline: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,609 @@
|
||||
---
|
||||
import Button from '../Button.astro';
|
||||
---
|
||||
<article class="faq-page">
|
||||
<div class="faq-source container source-page">
|
||||
<slot />
|
||||
</div>
|
||||
|
||||
<section class="faq-search container-narrow">
|
||||
<div class="hs-search-field hs-search-field--initialized">
|
||||
<div class="hs-search-field__bar hs-search-field__bar--button-inline">
|
||||
<form class="hs-search-field__form" action="/search">
|
||||
<label class="sr-only" for="faq-search-input">Search FAQs</label>
|
||||
<input
|
||||
id="faq-search-input"
|
||||
type="search"
|
||||
class="hs-search-field__input"
|
||||
name="q"
|
||||
autocomplete="off"
|
||||
placeholder="Search"
|
||||
data-faq-search
|
||||
/>
|
||||
<button class="hs-search-field__button" type="button" aria-label="Search">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" aria-hidden="true" width="18" height="18">
|
||||
<path d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z" fill="#254080"/>
|
||||
</svg>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="faq-accordion" aria-labelledby="faq-questions-heading">
|
||||
<div class="container-narrow faq-accordion__inner">
|
||||
<h2 id="faq-questions-heading">Questions & Answers</h2>
|
||||
<div class="faq-list" data-faq-list></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="faq-cta faq-cta-primary">
|
||||
<div class="container-narrow">
|
||||
<p class="eyebrow">Still have questions?</p>
|
||||
<h2>Reach Out to Learn More</h2>
|
||||
<p>We hope this FAQ gives you a clear picture of how Applied Behavior Analysis (ABA) therapy at the Arizona Institute for Autism can support your child’s growth. If you have more questions or would like to <a href="/client-consultation">schedule an assessment</a>, please reach out. Our team is here to guide you and your learner every step of the way!</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="faq-cta faq-cta-secondary">
|
||||
<div class="container-narrow">
|
||||
<h2>Need Support in Getting an Autism Diagnosis?</h2>
|
||||
<p>To meet diagnostic criteria for ASD, a child must have persistent deficits in each of three areas of social communication and interaction plus at least two of four types of restricted repetitive behaviors. Consult with a Client Advocate today to receive individual and family support!</p>
|
||||
<Button href="/client-consultation" center>Request an Appointment</Button>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
|
||||
<script>
|
||||
const initFaqPage = () => {
|
||||
const root = document.querySelector('.faq-page');
|
||||
const source = root?.querySelector('.faq-source.source-page');
|
||||
const list = root?.querySelector('[data-faq-list]');
|
||||
const search = root?.querySelector('[data-faq-search]');
|
||||
|
||||
if (!(root instanceof HTMLElement) || !(source instanceof HTMLElement) || !(list instanceof HTMLElement) || !(search instanceof HTMLInputElement)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const nodes = [...source.childNodes];
|
||||
const firstQuestionIndex = nodes.findIndex((node) => node.nodeType === Node.ELEMENT_NODE && node.tagName === 'H3');
|
||||
|
||||
if (firstQuestionIndex === -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
let index = firstQuestionIndex;
|
||||
let openedFirst = false;
|
||||
|
||||
while (index < nodes.length) {
|
||||
const node = nodes[index];
|
||||
|
||||
if (!(node instanceof HTMLElement) || node.tagName !== 'H3') {
|
||||
index += 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
const details = document.createElement('details');
|
||||
details.className = 'faq';
|
||||
details.open = !openedFirst;
|
||||
|
||||
const summary = document.createElement('summary');
|
||||
const title = document.createElement('h3');
|
||||
title.textContent = node.textContent?.trim() || '';
|
||||
const icon = document.createElement('span');
|
||||
icon.className = 'faq-icon';
|
||||
icon.setAttribute('aria-hidden', 'true');
|
||||
summary.append(title, icon);
|
||||
details.appendChild(summary);
|
||||
|
||||
const answer = document.createElement('div');
|
||||
answer.className = 'faq-answer interactive-faq-with-seo-schema-integration__list__answer';
|
||||
const answerInner = document.createElement('div');
|
||||
answerInner.className = 'faq-answer__inner';
|
||||
|
||||
index += 1;
|
||||
while (index < nodes.length && !(nodes[index] instanceof HTMLElement && nodes[index].tagName === 'H3')) {
|
||||
const answerNode = nodes[index];
|
||||
if (answerNode.nodeType === Node.TEXT_NODE) {
|
||||
const text = answerNode.textContent?.trim();
|
||||
if (text) {
|
||||
const paragraph = document.createElement('p');
|
||||
paragraph.textContent = text;
|
||||
answerInner.appendChild(paragraph);
|
||||
}
|
||||
} else {
|
||||
answerInner.appendChild(answerNode.cloneNode(true));
|
||||
}
|
||||
answerNode.remove();
|
||||
index += 1;
|
||||
}
|
||||
|
||||
answer.appendChild(answerInner);
|
||||
details.appendChild(answer);
|
||||
list.appendChild(details);
|
||||
openedFirst = true;
|
||||
}
|
||||
|
||||
for (let i = firstQuestionIndex; i < nodes.length; i += 1) {
|
||||
nodes[i].remove();
|
||||
}
|
||||
|
||||
const faqItems = [...list.querySelectorAll('details.faq')];
|
||||
|
||||
const closeTimers = new WeakMap();
|
||||
const closeHandlers = new WeakMap();
|
||||
|
||||
const getAnswer = (item) => item.querySelector('.interactive-faq-with-seo-schema-integration__list__answer');
|
||||
const getAnswerInner = (item) => item.querySelector('.faq-answer__inner');
|
||||
|
||||
const setClosedStyles = (answer) => {
|
||||
answer.style.height = '0px';
|
||||
answer.style.opacity = '0';
|
||||
answer.style.transform = 'translateY(-.35rem)';
|
||||
};
|
||||
|
||||
const setOpenStyles = (answer) => {
|
||||
answer.style.opacity = '1';
|
||||
answer.style.transform = 'translateY(0)';
|
||||
};
|
||||
|
||||
faqItems.forEach((item, index) => {
|
||||
const answer = getAnswer(item);
|
||||
|
||||
if (!answer) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (index === 0 && item.open) {
|
||||
answer.style.height = 'auto';
|
||||
setOpenStyles(answer);
|
||||
delete item.dataset.state;
|
||||
} else if (!item.open) {
|
||||
answer.style.height = '0px';
|
||||
setClosedStyles(answer);
|
||||
}
|
||||
});
|
||||
|
||||
const closeItem = (item) => {
|
||||
if (!item.open || item.dataset.state === 'closing') {
|
||||
return;
|
||||
}
|
||||
|
||||
item.dataset.state = 'closing';
|
||||
const answer = getAnswer(item);
|
||||
const answerInner = getAnswerInner(item);
|
||||
|
||||
if (answer && answerInner) {
|
||||
const priorHandler = closeHandlers.get(item);
|
||||
if (priorHandler) {
|
||||
answer.removeEventListener('transitionend', priorHandler);
|
||||
}
|
||||
|
||||
answer.style.height = `${answerInner.scrollHeight}px`;
|
||||
answer.offsetHeight; // force reflow
|
||||
setClosedStyles(answer);
|
||||
|
||||
const onTransitionEnd = (event) => {
|
||||
if (event.target !== answer || event.propertyName !== 'height') {
|
||||
return;
|
||||
}
|
||||
|
||||
item.removeAttribute('open');
|
||||
delete item.dataset.state;
|
||||
answer.style.height = '0px';
|
||||
answer.removeEventListener('transitionend', onTransitionEnd);
|
||||
closeHandlers.delete(item);
|
||||
closeTimers.delete(item);
|
||||
};
|
||||
|
||||
closeHandlers.set(item, onTransitionEnd);
|
||||
answer.addEventListener('transitionend', onTransitionEnd);
|
||||
}
|
||||
|
||||
const timer = window.setTimeout(() => {
|
||||
const answerStillOpen = answer && answer.offsetHeight > 0;
|
||||
if (!answerStillOpen) {
|
||||
return;
|
||||
}
|
||||
|
||||
item.removeAttribute('open');
|
||||
delete item.dataset.state;
|
||||
if (answer) {
|
||||
answer.style.height = '0px';
|
||||
}
|
||||
closeHandlers.delete(item);
|
||||
closeTimers.delete(item);
|
||||
}, 360);
|
||||
closeTimers.set(item, timer);
|
||||
};
|
||||
|
||||
const openItem = (item) => {
|
||||
if (item.open && item.dataset.state !== 'closing') {
|
||||
return;
|
||||
}
|
||||
|
||||
const timer = closeTimers.get(item);
|
||||
if (timer) {
|
||||
window.clearTimeout(timer);
|
||||
closeTimers.delete(item);
|
||||
}
|
||||
|
||||
const priorHandler = closeHandlers.get(item);
|
||||
const answer = getAnswer(item);
|
||||
if (priorHandler && answer) {
|
||||
answer.removeEventListener('transitionend', priorHandler);
|
||||
closeHandlers.delete(item);
|
||||
}
|
||||
|
||||
item.setAttribute('open', '');
|
||||
item.dataset.state = 'opening';
|
||||
|
||||
const answerInner = getAnswerInner(item);
|
||||
if (answer && answerInner) {
|
||||
answer.style.height = '0px';
|
||||
setClosedStyles(answer);
|
||||
answer.offsetHeight; // force reflow
|
||||
window.requestAnimationFrame(() => {
|
||||
answer.style.height = `${answerInner.scrollHeight}px`;
|
||||
setOpenStyles(answer);
|
||||
});
|
||||
|
||||
const onTransitionEnd = (event) => {
|
||||
if (event.target !== answer || event.propertyName !== 'height') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (item.dataset.state === 'opening') {
|
||||
answer.style.height = 'auto';
|
||||
delete item.dataset.state;
|
||||
}
|
||||
|
||||
answer.removeEventListener('transitionend', onTransitionEnd);
|
||||
};
|
||||
|
||||
answer.addEventListener('transitionend', onTransitionEnd);
|
||||
}
|
||||
};
|
||||
|
||||
faqItems.forEach((item) => {
|
||||
const summary = item.querySelector('summary');
|
||||
summary?.addEventListener('click', (event) => {
|
||||
event.preventDefault();
|
||||
const willOpen = !item.open;
|
||||
|
||||
faqItems.forEach((other) => {
|
||||
if (other !== item) {
|
||||
closeItem(other);
|
||||
}
|
||||
});
|
||||
|
||||
if (willOpen) {
|
||||
openItem(item);
|
||||
} else {
|
||||
closeItem(item);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
const applyFilter = () => {
|
||||
const query = search.value.trim().toLowerCase();
|
||||
faqItems.forEach((item) => {
|
||||
const text = item.textContent?.toLowerCase() || '';
|
||||
item.hidden = Boolean(query) && !text.includes(query);
|
||||
});
|
||||
};
|
||||
|
||||
search.addEventListener('input', applyFilter);
|
||||
};
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initFaqPage, { once: true });
|
||||
} else {
|
||||
initFaqPage();
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.faq-page {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.faq-source {
|
||||
padding-block: 4rem 1rem;
|
||||
}
|
||||
|
||||
.faq-search {
|
||||
margin-bottom: 1.5rem;
|
||||
padding-block: 1rem 0.75rem;
|
||||
}
|
||||
|
||||
.sr-only {
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
white-space: nowrap;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
.hs-search-field {
|
||||
margin-inline: auto;
|
||||
width: min(780px, 100%);
|
||||
}
|
||||
|
||||
.hs-search-field--initialized {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.hs-search-field__bar {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.hs-search-field__form {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.hs-search-field__input {
|
||||
appearance: none;
|
||||
background: #fff;
|
||||
border: 2px solid rgba(37, 64, 128, .2);
|
||||
border-radius: 4px;
|
||||
color: var(--color-primary);
|
||||
flex: 1;
|
||||
font: inherit;
|
||||
line-height: 1.5;
|
||||
min-height: 3.125rem;
|
||||
min-width: 0;
|
||||
padding: .9rem 1.25rem;
|
||||
box-shadow: 0 1px 2px rgba(37, 64, 128, .06);
|
||||
}
|
||||
|
||||
.hs-search-field__input::placeholder {
|
||||
color: var(--color-muted);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.hs-search-field__input:focus {
|
||||
border-color: var(--color-accent);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.hs-search-field__button {
|
||||
align-items: center;
|
||||
background: #fff;
|
||||
border: 2px solid rgba(37, 64, 128, .2);
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 1px 2px rgba(37, 64, 128, .06);
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
flex: 0 0 auto;
|
||||
justify-content: center;
|
||||
margin-left: 2px;
|
||||
min-height: 3.125rem;
|
||||
opacity: .85;
|
||||
padding-inline: 1rem;
|
||||
}
|
||||
|
||||
.hs-search-field__button:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.faq-accordion {
|
||||
background: var(--color-tint);
|
||||
padding-block: 2rem 4rem;
|
||||
}
|
||||
|
||||
.faq-accordion__inner {
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.faq-accordion h2 {
|
||||
color: var(--color-primary);
|
||||
font-family: var(--font-heading);
|
||||
font-size: clamp(2rem, 4vw, 3rem);
|
||||
margin: 0 0 1.75rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
:global(.faq-list) {
|
||||
padding: 1.5rem 1.25rem 1rem;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq) {
|
||||
background: transparent;
|
||||
border-bottom: 1px solid var(--color-accent-strong);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq:last-child) {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq[hidden]) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:global(.faq-list summary) {
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
gap: 1.5rem;
|
||||
justify-content: space-between;
|
||||
list-style: none;
|
||||
padding: .875rem 0;
|
||||
}
|
||||
|
||||
:global(.faq-list summary::-webkit-details-marker) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:global(.faq-list summary h3) {
|
||||
color: var(--color-primary);
|
||||
font-family: var(--font-body);
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
line-height: 1.625;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-icon) {
|
||||
flex: 0 0 auto;
|
||||
display: block;
|
||||
height: 12px;
|
||||
margin-inline-start: auto;
|
||||
position: relative;
|
||||
width: 12px;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-icon::after) {
|
||||
border-bottom: 1px solid var(--color-accent-strong);
|
||||
border-right: 1px solid var(--color-accent-strong);
|
||||
content: "";
|
||||
display: block;
|
||||
height: 12px;
|
||||
transform: translateY(-50%) rotate(45deg);
|
||||
transform-origin: center;
|
||||
transition: transform 300ms ease;
|
||||
width: 12px;
|
||||
}
|
||||
|
||||
:global(.faq-list details[open] .faq-icon::after) {
|
||||
transform: rotate(-135deg);
|
||||
}
|
||||
|
||||
:global(.faq-list .interactive-faq-with-seo-schema-integration__list__answer) {
|
||||
height: 0;
|
||||
margin-bottom: 0;
|
||||
opacity: 0;
|
||||
transform: translateY(-.35rem);
|
||||
overflow: hidden;
|
||||
transition: height .3s ease, margin-bottom .3s ease, opacity .3s ease, transform .3s ease;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq[open] .interactive-faq-with-seo-schema-integration__list__answer) {
|
||||
margin-bottom: .85rem;
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner) {
|
||||
padding-bottom: .25rem;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer p) {
|
||||
margin: 0 0 1rem;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer p:last-child) {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner h4),
|
||||
:global(.faq-list .faq-answer__inner h5) {
|
||||
color: var(--color-primary);
|
||||
font-family: var(--font-heading);
|
||||
font-weight: 700;
|
||||
margin-top: 0;
|
||||
text-wrap: balance;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner h4) {
|
||||
font-size: 2rem;
|
||||
line-height: 2.5rem;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner h5) {
|
||||
font-size: 1.5rem;
|
||||
line-height: 2rem;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner :where(ul, ol)) {
|
||||
margin-block: 0 1.5rem;
|
||||
padding-inline-start: 2.5rem;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner :where(ul, ol) :where(ul, ol)) {
|
||||
margin-block: .25rem 0;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner li) {
|
||||
line-height: 1.625;
|
||||
margin-block: 0;
|
||||
padding-inline-start: .15rem;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner li > p) {
|
||||
margin-block: 0;
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner ul > li::marker) {
|
||||
color: var(--color-accent-strong);
|
||||
}
|
||||
|
||||
:global(.faq-list .faq-answer__inner ol > li::marker) {
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
.faq-cta-primary {
|
||||
background: var(--color-primary);
|
||||
color: #fff;
|
||||
padding-block: 3.5rem;
|
||||
}
|
||||
|
||||
.faq-cta-primary .eyebrow {
|
||||
color: #f9b34d;
|
||||
}
|
||||
|
||||
.faq-cta-primary h2,
|
||||
.faq-cta-primary p {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.faq-cta-primary h2 {
|
||||
font-size: clamp(1.8rem, 4vw, 2.8rem);
|
||||
margin-bottom: .75rem;
|
||||
}
|
||||
|
||||
.faq-cta-secondary {
|
||||
background: #fff;
|
||||
padding-block: 3.5rem 4rem;
|
||||
}
|
||||
|
||||
.faq-cta-secondary h2 {
|
||||
color: var(--color-primary);
|
||||
font-size: clamp(1.8rem, 4vw, 2.8rem);
|
||||
margin-bottom: .75rem;
|
||||
}
|
||||
|
||||
.faq-cta-secondary :global(.content-button) {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.faq-source {
|
||||
padding-top: 4.5rem;
|
||||
}
|
||||
|
||||
.faq-search {
|
||||
margin-bottom: 2rem;
|
||||
padding-block-end: 1rem;
|
||||
}
|
||||
|
||||
.faq-list {
|
||||
padding: 2.5rem 2rem 1.5rem;
|
||||
}
|
||||
|
||||
.faq-accordion h2 {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
import { getEntry } from 'astro:content';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import HomeBenefits from '../home/HomeBenefits.astro';
|
||||
import HomeDirector from '../home/HomeDirector.astro';
|
||||
import HomeEsa from '../home/HomeEsa.astro';
|
||||
import HomeFinancialHelp from '../home/HomeFinancialHelp.astro';
|
||||
import HomeHero from '../home/HomeHero.astro';
|
||||
import HomeInsurance from '../home/HomeInsurance.astro';
|
||||
import HomeProcess from '../home/HomeProcess.astro';
|
||||
import HomeServicesIntro from '../home/HomeServicesIntro.astro';
|
||||
import HomeSkills from '../home/HomeSkills.astro';
|
||||
import HomeTestimonials from '../home/HomeTestimonials.astro';
|
||||
import type { HomePageContent, HomeSection } from '../../types/home-sections';
|
||||
|
||||
interface Props { lang?: string }
|
||||
const { lang = 'en' } = Astro.props;
|
||||
const es = lang === 'es';
|
||||
const entry = await getEntry('pages', es ? 'es/index' : 'en/index');
|
||||
if (!entry) throw new Error(`[HomePage] Content entry not found for lang="${lang}". If running in dev, restart the dev server to rebuild the content layer cache.`);
|
||||
const { title, description, canonical } = entry.data;
|
||||
|
||||
function fromHomeContent(home: HomePageContent): HomeSection[] {
|
||||
return [
|
||||
{ type: 'hero', ...home.hero },
|
||||
{ type: 'services-intro', ...home.servicesIntro },
|
||||
{ type: 'benefits', ...home.benefits },
|
||||
{ type: 'skills', ...home.skills },
|
||||
{ type: 'insurance', ...home.insurance },
|
||||
{ type: 'esa', ...home.esa },
|
||||
{ type: 'financial-help', ...home.financialHelp },
|
||||
{ type: 'process', ...home.process },
|
||||
{ type: 'director', ...home.director },
|
||||
{ type: 'testimonials', ...home.testimonials },
|
||||
];
|
||||
}
|
||||
|
||||
const sections: HomeSection[] = entry.data.home
|
||||
? fromHomeContent(entry.data.home)
|
||||
: ((entry.data.sections ?? []) as HomeSection[]);
|
||||
---
|
||||
<BaseLayout {title} {description} {canonical} {lang}>
|
||||
{sections.map((section) => {
|
||||
switch (section.type) {
|
||||
case 'hero':
|
||||
return <HomeHero section={section} />;
|
||||
case 'services-intro':
|
||||
return <HomeServicesIntro section={section} />;
|
||||
case 'benefits':
|
||||
return <HomeBenefits section={section} />;
|
||||
case 'skills':
|
||||
return <HomeSkills section={section} />;
|
||||
case 'insurance':
|
||||
return <HomeInsurance section={section} />;
|
||||
case 'esa':
|
||||
return <HomeEsa section={section} />;
|
||||
case 'financial-help':
|
||||
return <HomeFinancialHelp section={section} />;
|
||||
case 'process':
|
||||
return <HomeProcess section={section} />;
|
||||
case 'director':
|
||||
return <HomeDirector section={section} />;
|
||||
case 'testimonials':
|
||||
return <HomeTestimonials section={section} />;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
})}
|
||||
</BaseLayout>
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
import Button from '../Button.astro';
|
||||
---
|
||||
|
||||
<style>
|
||||
.services-intro { padding-block: 5rem 1.25rem; }
|
||||
.services-intro-cta { margin-top: 2rem; text-align: center; }
|
||||
|
||||
.services-cards-section { background: var(--color-primary); padding-block: 3rem; }
|
||||
.services-cards-section h2 { color: white; margin-top: 0; text-align: center; }
|
||||
.services-cards-desc { color: white; margin-bottom: 2rem; }
|
||||
|
||||
.service-cards-grid { display: grid; gap: 20px; grid-template-columns: 1fr; }
|
||||
.service-card-link { background-color: var(--color-accent); background-position: center; background-repeat: no-repeat; background-size: cover; border-radius: 6px; display: block; padding: 20% 2rem 2rem; text-align: center; text-decoration: none; transition: all .3s ease-in-out; }
|
||||
.service-card-link:hover { transform: scale(1.05); }
|
||||
.service-card-link:hover .service-card-title { background: #fffc; border-color: var(--color-accent-strong); color: var(--color-primary) !important; }
|
||||
.service-card-title { background: var(--color-accent); border: 2px solid var(--color-accent); border-radius: var(--radius-sm); color: var(--color-primary) !important; display: inline-block; font-family: var(--font-body); font-size: 1rem; font-weight: 600; line-height: 1.5; margin: 0; padding: .65rem 1.2rem; position: relative; top: .15rem; white-space: nowrap; }
|
||||
|
||||
.services-diagnosis-section { margin-block: 6rem; }
|
||||
.services-diagnosis-card { background: var(--color-tint); border-radius: 6px; padding: 2rem 1.25rem; }
|
||||
.services-diagnosis-inner { align-items: center; display: flex; flex-direction: column; gap: 2rem; justify-content: space-between; }
|
||||
.services-diagnosis-text h2 { margin-top: 0; }
|
||||
.services-diagnosis-text p { margin-bottom: 0; }
|
||||
.services-diagnosis-btn { min-width: fit-content; }
|
||||
|
||||
@media (min-width: 768px) { .service-cards-grid { gap: 30px; grid-template-columns: repeat(2, 1fr); } .services-diagnosis-card { padding: 4.375rem; } .services-diagnosis-inner { flex-direction: row; } }
|
||||
@media (min-width: 768px) and (max-width: 1023px) { .service-card-link:last-child { grid-column: 1 / -1; margin-inline: auto; padding-top: calc(10% - 3px); width: calc(50% - 15px); } }
|
||||
@media (min-width: 1024px) { .service-cards-grid { grid-template-columns: repeat(3, 1fr); } .service-card-link { padding-top: 42%; } }
|
||||
</style>
|
||||
|
||||
<section class="services-intro">
|
||||
<div class="container">
|
||||
<h2>Autism Spectrum Disorder Services</h2>
|
||||
<p>Autism Spectrum Disorder (ASD) refers to a group of complex brain development disorders and is characterized by difficulties with social interaction, verbal and non-verbal communication, and emotional control.</p>
|
||||
<p>The Arizona Institute for Autism helps with Autism Evaluations and Diagnostic Screenings, Applied Behavior Analysis (ABA) Therapy, and Educational Programming tailored to each learner's needs. To support meaningful skill development, we design integrative ABA programs for children diagnosed with autism. We offer both individualized and group ABA Therapy, along with educational services that reflect each child's unique strengths and goals.</p>
|
||||
<h3>AIA ABA & Educational Options</h3>
|
||||
<ul>
|
||||
<li>In-Center</li>
|
||||
<li>In-School</li>
|
||||
<li>In-Home</li>
|
||||
<li>Early Intervention</li>
|
||||
<li>Academic Readiness</li>
|
||||
<li>Clinical Supervision</li>
|
||||
<li>Parent Consultation</li>
|
||||
</ul>
|
||||
<h3>Does My Learner Have Autism?</h3>
|
||||
<p>Approximately 1 in 36 children in the United States will receive an autism diagnosis each year. If your child exhibits any of the behaviors listed above, it is possible that he or she may be diagnosed on the autism spectrum. Diagnosing children with Autism Spectrum Disorder can be challenging and complex. The most important thing you can do is consult a professional if you think your child is displaying atypical behavior.</p>
|
||||
<p class="services-intro-cta"><Button href="/client-consultation">Consult with a Client Advocate</Button></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="services-cards-section">
|
||||
<div class="container">
|
||||
<h2>Our Services</h2>
|
||||
<p class="services-cards-desc">Arizona Institute for Autism (AIA) offers a comprehensive range of services tailored to individuals with Autism Spectrum Disorder (ASD). Our programs include early intervention for young children, Applied Behavior Analysis (ABA) therapy, social skills groups, and educational support services. AIA is committed to providing personalized care plans to enhance the quality of life for children with autism and their families.</p>
|
||||
<div class="service-cards-grid">
|
||||
<a href="/aba-therapy" class="service-card-link" style="background-image:url('/assets/images/services-card-behavioral.jpg')"><h3 class="service-card-title">Behavioral Services</h3></a>
|
||||
<a href="/autism-evaluations" class="service-card-link" style="background-image:url('/assets/images/services-card-psychological.jpg')"><h3 class="service-card-title">Psychological Services</h3></a>
|
||||
<a href="/learner-social-club" class="service-card-link" style="background-image:url('/assets/images/services-card-sociological.jpg')"><h3 class="service-card-title">Sociological Services</h3></a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="services-diagnosis-section">
|
||||
<div class="container container-w">
|
||||
<div class="services-diagnosis-card">
|
||||
<div class="services-diagnosis-inner">
|
||||
<div class="services-diagnosis-text">
|
||||
<h2>Need Autism Diagnosis Support?</h2>
|
||||
<p>To meet diagnostic criteria for ASD, a child must have persistent deficits in each of three areas of social communication and interaction plus at least two of four types of restricted repetitive behaviors. Consult with a Client Advocate today to receive individual and family support!</p>
|
||||
</div>
|
||||
<div class="services-diagnosis-btn">
|
||||
<Button href="/client-consultation">Get a Free Consultation</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
import Button from '../Button.astro';
|
||||
import ContactObfuscation from '../ContactObfuscation.astro';
|
||||
const groups = [
|
||||
{
|
||||
title: 'Board Certified Behavioral Analysts & Psychologists',
|
||||
@@ -26,6 +28,8 @@ const groups = [
|
||||
},
|
||||
{
|
||||
title: 'ABA Clinic Management',
|
||||
tagline: 'Applied Behavior Analysis "(ABA) at your service"',
|
||||
tinted: true,
|
||||
members: [
|
||||
['team-mariah-marley.webp', 'Mariah Marley', 'Claims Billing'],
|
||||
['team-eney-garcia.webp', 'Eney Garcia, BA', 'Accounts Billing'],
|
||||
@@ -38,30 +42,56 @@ const groups = [
|
||||
<article class="team-page">
|
||||
<section class="team-intro container-narrow">
|
||||
<h2>Our Clinical Team</h2>
|
||||
<p class="script-label">Arizona Institute for Autism<br />Scottsdale, Arizona</p>
|
||||
<p class="eyebrow">Arizona Institute for Autism<br />Scottsdale, Arizona</p>
|
||||
<p>AIA's clinical team consists of experienced professionals and paraprofessionals as well as Board Certified Behavior Analysts (BCBA) and Psychologists who have diverse experience and expertise.</p>
|
||||
</section>
|
||||
{groups.map((group) => (
|
||||
<section class="team-group container">
|
||||
<h2>{group.title}</h2>
|
||||
<div class="team-grid">
|
||||
{group.members.map(([image, name, role]) => (
|
||||
<article class="team-member">
|
||||
<img src={`/assets/images/${image}`} alt={name} loading="lazy" />
|
||||
<h3>{name}</h3>
|
||||
<p>{role}</p>
|
||||
</article>
|
||||
))}
|
||||
<section class:list={['team-group', { 'section-tint': group.tinted }]}>
|
||||
<div class="container">
|
||||
<h2>{group.title}</h2>
|
||||
{group.tagline && <p class="team-group__tagline"><em>{group.tagline}</em></p>}
|
||||
<div class="team-grid">
|
||||
{group.members.map(([image, name, role]) => (
|
||||
<article class="team-member">
|
||||
<div class="team-thumb">
|
||||
<img src={`/assets/images/${image}`} alt={name} loading="lazy" />
|
||||
</div>
|
||||
<h3>{name}</h3>
|
||||
<p>{role}</p>
|
||||
</article>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
))}
|
||||
<section class="team-careers">
|
||||
<div class="container-narrow">
|
||||
<p class="script-label">Join the AIA Team!</p>
|
||||
<p class="eyebrow">Join the AIA Team!</p>
|
||||
<h2>Employment Opportunities</h2>
|
||||
<p>Apply online to join the AIA team! At the Arizona Institute for Autism (AIA) we are on a mission to improve special education and strengthen communities throughout Arizona.</p>
|
||||
<p>Our talented and passionate employees are a critical piece to the high-quality ABA therapy we provide along with our commitment to behavioral health, school solutions, and community outreach.</p>
|
||||
<a class="button" href="/careers">View Open Positions</a>
|
||||
<p>Our talented and passionate employees are a critical piece to the high-quality ABA therapy we provide along with our commitment to behavioral health, school solutions, and community outreach. For questions regarding open positions, please contact us at <ContactObfuscation email="hr@azinstitute4autism.com" obfuscatedText="hr [at] abaclinicaz [dot] com" class="team-email" />.</p>
|
||||
<Button href="/careers">View Open Positions</Button>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
|
||||
<style>
|
||||
.team-intro { padding-block: 4rem; text-align: center; }
|
||||
.team-intro .eyebrow { font-size: 1.8rem; }
|
||||
.team-group { padding-block: 2rem 4rem; text-align: center; }
|
||||
.team-group h2 { margin: 0 auto 1rem; max-width: 760px; }
|
||||
.team-group__tagline { font-size: 1.125rem; margin: 0 auto 2rem; }
|
||||
.team-grid { display: flex; flex-wrap: wrap; gap: 2rem 1.5rem; justify-content: center; }
|
||||
.team-member { flex: 0 0 227px; }
|
||||
.team-thumb { border-radius: 4px; overflow: hidden; }
|
||||
.team-thumb img { display: block; object-fit: cover; transform: scale(1.1); transition: transform .5s; width: 100%; }
|
||||
.team-thumb img:hover { transform: scale(1.05); }
|
||||
.team-member h3 { font-family: var(--font-body); font-size: .8rem; margin-bottom: 0; }
|
||||
.team-member p { font-size: .85rem; margin: 0; }
|
||||
.team-careers { padding-block: 5rem; }
|
||||
.team-careers :global(.content-button) { margin-left: 50%; margin-top: 4rem; translate: -50%; }
|
||||
.team-email { font-weight: 700; }
|
||||
@media (max-width: 950px) {
|
||||
.team-member { flex-basis: min(100%, 227px); }
|
||||
}
|
||||
</style>
|
||||
@@ -1,5 +1,6 @@
|
||||
import { defineCollection, z } from 'astro:content';
|
||||
import { glob } from 'astro/loaders';
|
||||
import { homePageSchema, homeSectionsSchema } from './types/home-sections';
|
||||
|
||||
const language = z.enum(['en', 'ar', 'es']);
|
||||
const shared = {
|
||||
@@ -12,7 +13,8 @@ const shared = {
|
||||
lang: language,
|
||||
translationKey: z.string().optional(),
|
||||
draft: z.boolean().default(false),
|
||||
sections: z.array(z.record(z.unknown())).optional()
|
||||
home: homePageSchema.optional(),
|
||||
sections: homeSectionsSchema.optional()
|
||||
};
|
||||
|
||||
const pages = defineCollection({
|
||||
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Applied Behavior Analysis (ABA) is an evidence-based approach that utilizes the principles of behavior analysis to modify maladaptive behaviors and enhance socially significant behaviors. It is often employed for children with Autism Spectrum Disorder (ASD). ABA aims to teach a variety of skills, such as communication, social interactions, and daily skills, all within a safe, engaging, and fun environment conducive to therapeutic success. It also helps children minimize disruptive behaviors that may impede their learning, while prioritizing the child's individual autonomy.
|
||||
|
||||
ABA therapy is highly beneficial for children with an autism diagnosis because it is tailored to each child's unique needs, optimizing outcomes. Skills are taught in a manner that maximizes the child's receptivity; this is achieved by breaking the skills into smaller, achievable targets. Furthermore, skills are generalized by teaching them across different settings and individuals. When a child begins receiving ABA therapy, progress is continuously monitored through ongoing data collection. This data is analyzed to ensure the efficacy of the intervention, and observations are made to guarantee that the child is learning effectively. An essential goal of ABA is not just short-term behavioral modification, but also the generalization and maintenance of learned skills over time. ABA therapy provides tools for managing challenging behaviors such as aggression, self-injury, or disruption. By understanding the function of these behaviors, suitable replacements can be taught, aiding the child's overall improvement.
|
||||
@@ -21,4 +23,4 @@ Parental participation is a critical component of ABA Therapy. Parents and careg
|
||||
|
||||
At the Arizona Institute for Autism, our focus is on the learner. Our services are designed to meet individual needs, working collaboratively with a team of clinicians and parents. This approach aims to improve the quality of life for children with autism and their families.
|
||||
|
||||
For more information on ABA therapy services offered by AIA, or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at [(480) 687-7099](tel:+14806877099), or email [info@azinstitute4autism.com](mailto:info@azinstitute4autism.com). If you are looking for more applied behavioral analysis and ASD diagnosis tips, check out [more articles](../library) from AIA’s clinical director, Rula Diab!
|
||||
For more information on ABA therapy services offered by AIA, or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, or email <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />. If you are looking for more applied behavioral analysis and ASD diagnosis tips, check out [more articles](../library) from AIA’s clinical director, Rula Diab!
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Toilet training a child with autism can be a complex process that requires patience, consistency, and tailored strategies. Applied Behavior Analysis (ABA) offers effective techniques to support this journey. Here's a structured approach to facilitate toilet training for children with autism:
|
||||
|
||||
## 1. Assess Readiness
|
||||
@@ -61,4 +63,4 @@ Engage with therapists or specialists experienced in ABA to develop and refine y
|
||||
|
||||
By implementing these strategies with patience and consistency, you can support your child with autism in achieving successful toilet training.
|
||||
|
||||
For more information about ABA therapy services offered by AIA or to book your free consultation, visit our Arizona Institute for Autism website at [www.azinstitute4autism.com](../index), call [(480) 687-7099](tel:+14806877099), or email info@azinstitute4autism.com. If you are looking for more applied behavioral analysis and ASD diagnosis and treatment tips, check out more [blog posts](../library) from AIA’s clinical director, Rula Diab!
|
||||
For more information about ABA therapy services offered by AIA or to book your free consultation, visit our Arizona Institute for Autism website at [www.azinstitute4autism.com](../index), call <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, or email <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />. If you are looking for more applied behavioral analysis and ASD diagnosis and treatment tips, check out more [blog posts](../library) from AIA’s clinical director, Rula Diab!
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Hello AIA families,
|
||||
|
||||
Happy April, a.k.a World Autism Month!
|
||||
@@ -45,4 +47,4 @@ Celebrate and support neurodiversity and inclusion with our AIA family by attend
|
||||
|
||||
## Additional questions?
|
||||
|
||||
If you have questions about AIA's World Autism Community Day of Celebration or are interested in providing a sensory-friendly booth, contact kelly@azinstitute4autism.com.
|
||||
If you have questions about AIA's World Autism Community Day of Celebration or are interested in providing a sensory-friendly booth, contact <ContactObfuscation email="kelly@azinstitute4autism.com" obfuscatedText="kelly [at] azinstitute4autism [dot] com" />.
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
As a parent of a child diagnosed with [autism spectrum disorder](https://www.autismspeaks.org/what-autism), you may experience challenges when it comes to mealtime. Many children on the spectrum struggle with [sensory and food sensitivities](https://www.eatright.org/health/health-conditions/intellectual-and-developmental-disabilities/nutrition-for-your-child-with-autism-spectrum-disorder-asd), making it difficult to find foods that they prefer. With Thanksgiving quickly approaching, you may be wondering if there are any recipes that your child may enjoy for the holiday. Well good news- you are in the right place! For this month’s blog, I will be sharing an easy, delicious Thanksgiving recipe that you and your child will both enjoy- Pumpkin Dump Cake! This recipe is a great twist on the classic pumpkin pie.
|
||||
|
||||
This recipe is super easy to follow, and the best part is that your child can help you! Being able to help prepare their food often makes it more enticing for them to eat. It also teaches your child [fundamental life skills](https://www.purdueglobal.edu/blog/psychology/cooking-activities-help-children-autism/), such as how to cook, make decisions, and how to follow directions, as well as strengthening their fine motor skills. Giving your child the opportunity to help you with this recipe can make it more enjoyable for the both of you!
|
||||
@@ -73,4 +75,4 @@ If you have any leftovers, they can be stored for up to 4 days in the fridge or
|
||||
|
||||
This recipe is simple, easy, and delicious! We hope that you encourage your child to help you prepare the cake and have a great time while doing it. Enjoy!
|
||||
|
||||
For more information on aba therapy services offered by AIA or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at (480) 707-2195, or email info@azinstitute4autism.com. If you are looking for more applied behavioral analysis and asd diagnosis tips, check out AIA’s clinical director, Rula Diab, monthly [blog posts](../library)!
|
||||
For more information on aba therapy services offered by AIA or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at <ContactObfuscation phone="(480) 707-2195" hrefValue="+14807072195" obfuscatedText="5912-707 (084)" />, or email <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />. If you are looking for more applied behavioral analysis and asd diagnosis tips, check out AIA’s clinical director, Rula Diab, monthly [blog posts](../library)!
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
If you are the parent of a child with autism spectrum disorder, you probably know how difficult mealtime can be. Many children with an autism diagnosis tend to have sensory processing disorder, which can make it difficult for them to enjoy certain foods due to the texture, consistency, temperature, etc. Your child may only prefer a small variety of foods, which often leaves their diet lacking the essential nutrients they need. In this blog series, I will be sharing sensory-friendly recipes and tips to hopefully make mealtime easy and fun for your kiddo! These recipes will help broaden your child’s horizons when it comes to food and nutrition.
|
||||
|
||||
For this blog, I will be sharing an easy recipe that most kids love- Pancakes! This recipe can be modified to your child’s liking, as it’s important to gradually introduce new foods and ingredients. Use ingredients that your child prefers in order to make it more enticing and enjoyable!
|
||||
@@ -89,4 +91,4 @@ Your kiddo may not want plain pancakes, which is perfectly fine! There are a few
|
||||
|
||||
Feel free to vary the recipe however you want and give your kiddo the opportunity to choose which toppings or fillings they want. Mealtime should be fun and enjoyable, so allowing your child to help you or pick their preferred ingredients can make eating more enticing for them. I hope you and your child enjoy this sensory-friendly pancake recipe!
|
||||
|
||||
For more information on aba therapy services offered by AIA or to book your free consultation, visit our [contact page](../contact), call us at [(480) 687-7099](tel:+14806877099), or email [info@azinstitute4autism.com](mailto:info@azinstitute4autism.com). If you are looking for more applied behavioral analysis and asd diagnosis tips, check out AIA’s clinical director, Rula Diab, monthly blog posts!
|
||||
For more information on aba therapy services offered by AIA or to book your free consultation, visit our [contact page](../contact), call us at <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, or email <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />. If you are looking for more applied behavioral analysis and asd diagnosis tips, check out AIA’s clinical director, Rula Diab, monthly blog posts!
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Children may exhibit maladaptive behaviors for various reasons, often driven by underlying functions. To address these behaviors, Applied Behavior clinicians use the [ABC model](https://www.iidc.indiana.edu/irca/articles/observing-behavior-using-a-b-c-data), a structured approach that helps identify patterns and triggers. This model involves observing a child's behavior in their natural environment, focusing on three key elements: the Antecedent (what happens before the behavior), the Behavior itself, and the Consequence (what follows the behavior). By carefully analyzing these factors, clinicians gain insights into why certain behaviors occur.
|
||||
|
||||
Once the ABC data is collected, it guides clinicians in developing effective intervention strategies. By understanding the cause-and-effect relationship of behaviors, they can implement targeted consequences that reduce maladaptive behaviors while reinforcing positive alternatives. This process not only helps in decreasing unwanted actions but also encourages healthier coping mechanisms, fostering long-term behavioral improvements.
|
||||
@@ -35,6 +37,6 @@ BCBA clinicians use [consequence interventions](https://specialconnections.ku.ed
|
||||
|
||||
## Looking for more information?
|
||||
|
||||
For more information on services offered by AIA, or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at [(480) 687-7099](tel:+14806877099), or email [hello@azinstitute4autism.com](mailto:hello@azinstitute4autism.com).
|
||||
For more information on services offered by AIA, or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, or email <ContactObfuscation email="hello@azinstitute4autism.com" obfuscatedText="hello [at] azinstitute4autism [dot] com" />.
|
||||
|
||||
If you are looking for tips, check out more monthly [blog posts](../library) from AIA's clinical director, Rula Diab!
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Critical thinking is an important skill our children need to learn. It enables a child to generate the ability for a higher level of conceptual thinking and appropriately solve problems in their everyday life.
|
||||
|
||||
Children with Autism may lack the ability to appropriately communicate their feelings or sometimes tend to engage in repetitive ways of rigid thinking and repetitive behaviors. When they are faced with challenges, moments of frustration occur when no clear expectations are provided to our children regarding their daily schedule, and the activities they are required to engage in throughout the day.
|
||||
@@ -33,4 +35,4 @@ Applied Behavior Analysis is “*the process of systematically applying interven
|
||||
|
||||
It is okay for our children to make errors, however, as caregivers and parents, we should create learning opportunities for our children, give them the emotional support they need and model proper responses.
|
||||
|
||||
For more information on how to manage aggressive behavior and proper communication, connect with us by sending your messages and questions to [hello@azinsitute4autism.com](mailto:hello@azinsitute4autism.com) or contact us directly from our contact page.
|
||||
For more information on how to manage aggressive behavior and proper communication, connect with us by sending your messages and questions to <ContactObfuscation email="hello@azinsitute4autism.com" obfuscatedText="hello [at] azinsitute4autism [dot] com" /> or contact us directly from our contact page.
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Generalization is a crucial aspect of learning, ensuring that skills and behaviors extend beyond the initial learning environment. Without generalization, individuals may struggle to apply what they’ve learned to new situations, limiting the effectiveness of their education or therapy.
|
||||
|
||||
In behavioral science, generalization refers to the process by which a learned behavior is applied across different stimuli, responses, or settings.
|
||||
@@ -39,6 +41,6 @@ Understanding the three primary types of generalization—stimulus, response, an
|
||||
|
||||
## Looking for more information?
|
||||
|
||||
For more information on services offered by AIA, or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at [(480) 687-7099](tel:+14806877099), or email [info@azinstitute4autism.com](mailto:info@azinstitute4autism.com).
|
||||
For more information on services offered by AIA, or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, or email <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />.
|
||||
|
||||
If you are looking for more tips, check our [monthly blog posts](../library) from AIA’s clinical director, Rula Diab!
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
The Arizona Institute for Autism is thrilled to announce its transformation into an Integrated ABA Model, an approach that brings together clinicians and educators to provide exceptional intervention, learning experience, and individualized support for learners with autism. This model incorporates evidence-based interventions, ensuring a comprehensive approach tailored to each child's abilities, interests, and learning style.
|
||||
|
||||
By doing so, we aim to create a more effective and engaging treatment and learning process, addressing the diverse needs of each of our learners. Research has consistently demonstrated that effective ABA therapy can profoundly and positively impact children with autism, leading to long-lasting improvements in various areas of development. The Integrated ABA Model comprehensive nature enhances the potential for long-lasting improvements in various areas of development.
|
||||
@@ -25,4 +27,4 @@ Our approach focuses on teaching children to apply the skills they acquire durin
|
||||
|
||||
At the Arizona Institute for Autism, we are committed to empowering children with autism, maximizing their potential for growth and development, and paving the way for a brighter future filled with endless possibilities.
|
||||
|
||||
For more information on services offered by AIA or to book your free consultation, visit [https://www.azinstitute4autism.com](../index), call us at [(480) 687-7099](tel:+14806877099), or email [info@azinstitute4autism.com](mailto:info@azinstitute4autism.com). If you are looking for more tips, check out monthly [blog posts](../library) from AIA's clinical director, Rula Diab!
|
||||
For more information on services offered by AIA or to book your free consultation, visit [https://www.azinstitute4autism.com](../index), call us at <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, or email <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />. If you are looking for more tips, check out monthly [blog posts](../library) from AIA's clinical director, Rula Diab!
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Children with Autism may have difficulty communicating their needs and wants. Struggling to express their needs and escaping an unpreferred situation can all result in a child feeling frustrated. Not having control over their environment can often lead to aggressive and unengaging behaviors.
|
||||
|
||||
Communicating with our kiddos when they are engaging in challenging behaviors can be difficult. It is important to understand that behaviors are just an expression of distress. Understanding the function of your child's aggressive behavior can direct you to determine the proper ways to support your kiddos to communicate those needs appropriately and functionally.
|
||||
@@ -33,4 +35,4 @@ The best strategy for parents to manage aggressive behavior outburst are the fol
|
||||
|
||||
- Use less verbal interaction and use more visuals to help to de-escalate the challenging behavior.
|
||||
|
||||
For more information on how to manage aggressive behavior and proper communication, connect with us by sending your messages and questions to hello@azinsitute4autism.com or contact us directly at www.azinstitute4autism.com/contactus.
|
||||
For more information on how to manage aggressive behavior and proper communication, connect with us by sending your messages and questions to <ContactObfuscation email="hello@azinsitute4autism.com" obfuscatedText="hello [at] azinsitute4autism [dot] com" /> or contact us directly at www.azinstitute4autism.com/contactus.
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
The start of a new year is often associated with feelings of joy and optimism. It is also a time for parents of children with autism to reflect on their child's progress and set goals for the future. Here are some important factors to keep in mind for New Year 2024 when it comes to Applied Behavioral Analysis (ABA) therapy and holiday time:
|
||||
|
||||
- Take the time to review and celebrate the progress your child has made in the past year. Discuss any areas that need further development with your licensed Behavioral Analyst (BCBA) to ensure continued growth.
|
||||
@@ -25,4 +27,4 @@ The start of a new year is often associated with feelings of joy and optimism. I
|
||||
|
||||
The New Year symbolizes growth and development, and that applies to children with autism as well. Take this time to reflect, plan, and prioritize the well-being of both the child receiving therapy and their caregivers.
|
||||
|
||||
For more information about ABA therapy services offered by AIA or to book your free consultation, visit our Arizona Institute for Autism website at [www.azinstitute4autism.com](../index), call [(480) 687-7099](tel:+14806877099), or email [info@azinstitute4autism.com](mailto:info@azinstitute4autism.com). If you are looking for more applied behavioral analysis and ASD diagnosis and treatment tips, check out more [blog posts](../library) from AIA’s clinical director, Rula Diab!
|
||||
For more information about ABA therapy services offered by AIA or to book your free consultation, visit our Arizona Institute for Autism website at [www.azinstitute4autism.com](../index), call <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, or email <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />. If you are looking for more applied behavioral analysis and ASD diagnosis and treatment tips, check out more [blog posts](../library) from AIA’s clinical director, Rula Diab!
|
||||
+3
-1
@@ -13,8 +13,10 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
The New Year can be challenging for children with Autism and may lead to distress. Different factors affect the ability of children with autism to cope during those times. The inability to deal with changes and disruption in routines and cope with unclear expectations can be stressful. Additionally, sensory overload including loud music, bright lighting, strong smells, etc. may cause children to feel uncomfortable.
|
||||
|
||||
To decrease stress as much as possible during the holiday time, it is important to provide your child with visual Support (i.e., visual schedules) for the purpose of preparing your child to manage changes in schedule and minimize disruption and triggers. Additionally, social stories can be great visual support to clarify activities and events during the holidays along with using a reinforcer system (i.e., Token System) to handle behaviors before it happens.
|
||||
|
||||
For more information on how to manage aggressive behavior and proper communication, connect with us by sending your messages and questions to [hello@azinsitute4autism.com](mailto:hello@azinsitute4autism.com) or contact us directly from our contact page.
|
||||
For more information on how to manage aggressive behavior and proper communication, connect with us by sending your messages and questions to <ContactObfuscation email="hello@azinsitute4autism.com" obfuscatedText="hello [at] azinsitute4autism [dot] com" /> or contact us directly from our contact page.
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Children can get overwhelmed, frustrated, and sensory overloaded at any time because of different needs, which can result in a child engaging in challenging behaviors. However, the common thing among all children is that they are in need of support with their communication skills. Different strategies can be used to prevent or minimize challenging behavior, including:
|
||||
|
||||
- Being proactive, instead of reacting to a child’s behavior. Using proactive strategies that have the most significant impact can help in teaching children the skills they need to convey their needs/wants. Proactive strategies include Communication Skills, Coping Skills, Manding Skills, Attending Skills, etc. Waiting until the child is engaging in disruptive behaviors and then intervening is not beneficial, nor teachable for the child.
|
||||
@@ -23,4 +25,4 @@ Children can get overwhelmed, frustrated, and sensory overloaded at any time bec
|
||||
|
||||
- Allow your child to make a choice in the type of the activity or task presented (e.g., “Do you want to read a book about a cat or a book about a dog?”) or the place to engage in the activity (e.g. “Do you like to play with Lego inside or outside”).
|
||||
|
||||
For more information on how to reduce behavior management, schedule a consultation with us today at [(480) 687-7099](tel:+14806877099) or reach out via our [contact form](../contact).
|
||||
For more information on how to reduce behavior management, schedule a consultation with us today at <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" /> or reach out via our [contact form](../contact).
|
||||
+3
-1
@@ -13,10 +13,12 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Children with autism often engage in repetitive behaviors as a way to cope with sensory overload. These behaviors can manifest in various ways including repetitive motor behaviors. Repetitive behaviors can affect children's learning experiences, social interactions, and engagement in daily activities.
|
||||
|
||||
As each child is unique and often requires tailored support, it's essential to comprehend each child’s needs and preferences also offering alternative and functional ways for them to engage in these behaviors. Such adaptations can help children be more engaged throughout the day, as well as offer them a constructive outlet for emotional expression and self-soothing. The goal is to teach a child alternative behaviors that serve the same purpose but are more adaptable during structured environments. This allows for better focus and participation during activities requiring attention, while still giving them the coping mechanisms they need. Changing their surroundings can also reduce triggers that lead to repetitive behaviors. Therefore, it helps children to regulate their emotions in a socially acceptable manner, while still meeting their behavioral and emotional needs.
|
||||
|
||||
## Looking for more information?
|
||||
|
||||
For more information on services offered by AIA or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at [(480) 687-7099](tel:+14806877099), or email [info@azinstitute4autism.com](mailto:info@azinstitute4autism.com). If you are looking for more tips, check out monthly [blog posts](../library) from AIA’s clinical director, Rula Diab!
|
||||
For more information on services offered by AIA or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), contact us at <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, or email <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />. If you are looking for more tips, check out monthly [blog posts](../library) from AIA’s clinical director, Rula Diab!
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Parenting a child with autism is an immensely rewarding experience, but it also presents unique challenges. To provide the best support, it is crucial to navigate our children's development while comprehending their needs.
|
||||
|
||||
In this blog post, we will delve into essential insights and practical tips to help parents better understand and support their child with autism.
|
||||
@@ -41,6 +43,6 @@ Remember, each child with autism is unique. By educating yourself, seeking suppo
|
||||
|
||||
## Looking for more information?
|
||||
|
||||
For more information on services offered by AIA or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), call us at [(480) 687-7099](tel:+14806877099), or email [hello@azinstitute4autism.com](mailto:hello@azinstitute4autism.com).
|
||||
For more information on services offered by AIA or to book your free consultation, visit us at [https://www.azinstitute4autism.com](../index), call us at <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, or email <ContactObfuscation email="hello@azinstitute4autism.com" obfuscatedText="hello [at] azinstitute4autism [dot] com" />.
|
||||
|
||||
If you are looking for more tips, check out [monthly blog posts](../library) from AIA’s clinical director, Rula Diab!
|
||||
+3
-1
@@ -13,6 +13,8 @@ tags: []
|
||||
draft: false
|
||||
---
|
||||
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
La generalización es un aspecto crucial del aprendizaje, ya que garantiza que las habilidades y los comportamientos se extiendan más allá del entorno de aprendizaje inicial. Sin generalización, los individuos pueden tener dificultades para aplicar lo que han aprendido a nuevas situaciones, limitando la efectividad de su educación o terapia.
|
||||
|
||||
En la ciencia del comportamiento, la generalización se refiere al proceso por el cual una conducta aprendida se aplica a diferentes estímulos, respuestas o entornos.
|
||||
@@ -39,6 +41,6 @@ Comprender los tres tipos principales de generalización (estímulo, respuesta y
|
||||
|
||||
## ¿Buscas más información?
|
||||
|
||||
Para más información sobre los servicios ofrecidos por AIA, o para reservar su consulta gratuita, visítenos en [https://www.azinstitute4autism.com](../../index), contáctenos en [(480) 687-7099](tel:+14806877099), o correo electrónico [info@azinstitute4autism.com](mailto:info@azinstitute4autism.com).
|
||||
Para más información sobre los servicios ofrecidos por AIA, o para reservar su consulta gratuita, visítenos en [https://www.azinstitute4autism.com](../../index), contáctenos en <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />, o correo electrónico <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />.
|
||||
|
||||
Si buscas más consejos, ¡consulta las [publicaciones mensuales de nuestro blog](../../library) de la directora clínica de AIA, Rula Diab!
|
||||
@@ -16,9 +16,9 @@ The Arizona Institute for Autism offers a variety of evidence-based, clinical se
|
||||
|
||||
Our ABA Therapy programs address the comprehensive needs of each learner, equipping children with the skills necessary to become independent learners.
|
||||
|
||||
### Services We Offer
|
||||
### Behavioral Services We Offer
|
||||
|
||||
Individual Learning
|
||||
<p class="eyebrow">Individual Learning</p>
|
||||
|
||||
#### ABA Therapy 1:1 Program
|
||||
|
||||
@@ -28,7 +28,7 @@ The ABA Therapy 1:1 program, designed for children aged 2 to 8 years, adopts an
|
||||
|
||||
Our ABA therapy focuses on improving socially significant behaviors by using positive reinforcement, systematic teaching, and data-driven methods. AIA Clinicians focus on tailoring our services to accommodate the unique neurodevelopmental profiles of each learner.
|
||||
|
||||
Group Learning
|
||||
<p class="eyebrow">Group Learning</p>
|
||||
|
||||
#### ABA Therapy 1:2 Academic Readiness Program
|
||||
|
||||
@@ -38,7 +38,7 @@ The ABA Therapy 1:2 Academic Readiness Program is specifically designed for chil
|
||||
|
||||
The primary developmental milestones emphasized in this program include social, communication, cognitive, social-emotional, executive functioning, and motor skills. Throughout the Academic Readiness Program, your child will engage in a variety of structured electives such as speech therapy, recreational therapy, and music therapy. These electives, including circle time, arts and crafts, music, play, and other group interactions, that are designed to support skills development in these key areas.
|
||||
|
||||
Family Education
|
||||
<p class="eyebrow">Family Education</p>
|
||||
|
||||
#### Parent Consultation Program
|
||||
|
||||
@@ -50,7 +50,7 @@ Our goal is to empower families with the knowledge, tools, and support they need
|
||||
|
||||
These consultations provide parents with personalized guidance, training, and strategies tailored to their child’s unique needs.
|
||||
|
||||
<Button href="https://form.jotform.com/231638510219149" target="_blank">Make an Appointment</Button>
|
||||
<Button href="https://form.jotform.com/231638510219149" target="_blank" center>Make an Appointment</Button>
|
||||
|
||||
## About Rula Diab, Chief Clinical Director, BCBA, LBA
|
||||
|
||||
|
||||
@@ -50,4 +50,4 @@ ADOS is a structured evaluation tool used by our specialists to assess behaviors
|
||||
|
||||
This evaluation involves observing how your child interacts with various play-based social scenarios. For younger children, this may include activities like playing with blocks or having a snack, while older children who communicate verbally may participate in conversations about daily activities, such as attending school.
|
||||
|
||||
<Button href="https://form.jotform.com/231638510219149" target="_blank">Make an Appointment</Button>
|
||||
<Button href="https://form.jotform.com/231638510219149" target="_blank" center>Make an Appointment</Button>
|
||||
|
||||
@@ -16,7 +16,7 @@ Apply to join the Arizona Institute for Autism (AIA) team today. We are on a mis
|
||||
|
||||
Our talented and passionate employees are a critical piece to the high-quality Autism services we provide along with our commitment to behavioral health, school solutions, and community outreach.
|
||||
|
||||
<Button href="https://www.indeed.com/cmp/Arizona-Institute-For-Autism/jobs" target="_blank">View Open Positions</Button>
|
||||
<Button href="https://www.indeed.com/cmp/Arizona-Institute-For-Autism/jobs" target="_blank" center>View Open Positions</Button>
|
||||
|
||||
### Our Benefits
|
||||
|
||||
@@ -108,7 +108,7 @@ Work someone you love. Begin your journey with Arizona's leading ABA Integrated
|
||||
|
||||

|
||||
|
||||
<Button href="https://www.indeed.com/cmp/Arizona-Institute-For-Autism/jobs" target="_blank">View Open Positions</Button>
|
||||
<Button href="https://www.indeed.com/cmp/Arizona-Institute-For-Autism/jobs" target="_blank" center>View Open Positions</Button>
|
||||
|
||||
## Benefits of Working at Arizona Institute for Autism
|
||||
|
||||
@@ -170,4 +170,4 @@ Take a fresh and innovative approach as a member of the Corporate team. Take on
|
||||
|
||||
Our specialty interns help shape the future of our center carefully curated clinical, operations, advocacy, people, and other departments.
|
||||
|
||||
<Button href="https://www.indeed.com/cmp/Arizona-Institute-For-Autism/jobs" target="_blank">View Open Positions</Button>
|
||||
<Button href="https://www.indeed.com/cmp/Arizona-Institute-For-Autism/jobs" target="_blank" center>View Open Positions</Button>
|
||||
|
||||
@@ -7,24 +7,25 @@ lang: "en"
|
||||
translationKey: "contact"
|
||||
draft: false
|
||||
---
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
import Button from '../../../components/Button.astro';
|
||||
|
||||
## Schedule a Tour
|
||||
|
||||
Reach out to one of our expert Client Advocates to see if ABA-integrated therapy is right for your learner.
|
||||
|
||||
Schedule Tour
|
||||
<Button href="/tour">Schedule Tour</Button>
|
||||
|
||||
## Reach Out
|
||||
|
||||
If you have questions about any of our services and programs, feel free to use the contact form on this page. You may also call or email using the following information.
|
||||
|
||||
General Inquiries: 9907-786 (084)
|
||||
**General Inquiries:** <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />
|
||||
|
||||
Billing Inquiries: 9240-807 (206)
|
||||
**Billing Inquiries:** <ContactObfuscation phone="(602) 708-0429" hrefValue="+16027080429" obfuscatedText="9240-807 (206)" />
|
||||
|
||||
Email: moc.msitua4etutitsniza@ofni
|
||||
**Email:** <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="moc.msitua4etutitsniza@ofni" />
|
||||
|
||||
Address: 8901 E. Raintree Drive, St #160 Scottsdale, AZ 85260
|
||||
**Address:** 8901 E. Raintree Drive, St #160 Scottsdale, AZ 85260
|
||||
|
||||
Hours: Monday - Friday, 8am - 6pm MST
|
||||
|
||||
### Contact AIA
|
||||
**Hours:** Monday - Friday, 8am - 6pm MST
|
||||
+3
-1
@@ -7,6 +7,8 @@ lang: "en"
|
||||
translationKey: "donate-autism-giveback"
|
||||
draft: false
|
||||
---
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
## Ways to Giveback
|
||||
|
||||
Every act of generosity, no matter how big or small, makes a difference at the Arizona Institute for Autism. Whether you donate items directly, support our Amazon iGiveback Wishlist, or contribute to our 501(c)(3) public charity, your support helps improve the lives of children with autism, their families, and the communities around them.
|
||||
@@ -21,7 +23,7 @@ Visit AIA’s Amazon iGiveback Wishlist today, pick an item (or two!), and help
|
||||
|
||||
### Host a Fundraiser
|
||||
|
||||
Would you like to host a fundraiser to benefit the Arizona Institute for Autism? Please contact us at moc.msitua4etutitsniza@ofni and a member of our team will be in touch to discuss next steps! All potential third party events will be evaluated in terms of their alignment with Arizona Institute for Autism's mission.
|
||||
Would you like to host a fundraiser to benefit the Arizona Institute for Autism? Please contact us at <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="moc.msitua4etutitsniza@ofni" /> and a member of our team will be in touch to discuss next steps! All potential third party events will be evaluated in terms of their alignment with Arizona Institute for Autism's mission.
|
||||
|
||||
## Community 4 Autism
|
||||
|
||||
+455
-546
File diff suppressed because it is too large
Load Diff
@@ -6,8 +6,9 @@ canonical: "https://www.azinstitute4autism.com/"
|
||||
lang: "en"
|
||||
translationKey: "index"
|
||||
draft: false
|
||||
sections:
|
||||
- type: hero
|
||||
home:
|
||||
# Hero
|
||||
hero:
|
||||
eyebrow: "Arizona's Leading Experts"
|
||||
heading: "Behavioral Health<br />& Special<br />Education"
|
||||
body: "Here at the Arizona Institute for Autism (AIA), we provide expert clinical care for children and teens who have an autism diagnosis. We currently serve families in Scottsdale, Gilbert, Mesa, Tempe, and Phoenix Metropolitan areas."
|
||||
@@ -17,7 +18,8 @@ sections:
|
||||
image: bcba-with-happy-toddler.webp
|
||||
imageAlt: BCBA therapist with happy toddler
|
||||
|
||||
- type: services-intro
|
||||
# Services and commitments
|
||||
servicesIntro:
|
||||
servicesHeading: ABA Therapy Services for Children and Teens Diagnosed with Autism Spectrum Disorder
|
||||
services:
|
||||
- Autism Advocacy Support
|
||||
@@ -42,7 +44,8 @@ sections:
|
||||
commitmentsImage: playing-boy.webp
|
||||
commitmentsImageAlt: Boy playing while learning
|
||||
|
||||
- type: benefits
|
||||
# Benefits
|
||||
benefits:
|
||||
heading: Benefits that go Beyond a Typical Integrated Therapy Provider
|
||||
subheading: The AIA Difference
|
||||
items:
|
||||
@@ -55,7 +58,8 @@ sections:
|
||||
videoImage: learner-journey.webp
|
||||
videoImageAlt: Learner journey for children with autism video
|
||||
|
||||
- type: skills
|
||||
# Skills
|
||||
skills:
|
||||
heading: Does Your Learner Struggle With These Skills?
|
||||
skills:
|
||||
- icon: icon-Social_Engagement.png
|
||||
@@ -71,7 +75,8 @@ sections:
|
||||
- icon: icon-Speach.png
|
||||
label: Speech
|
||||
|
||||
- type: insurance
|
||||
# Insurance
|
||||
insurance:
|
||||
heading: "Yes, We Take Insurance"
|
||||
body: "An all-in-one integrated service for your kiddo's special education needs, the Arizona Institute for Autism (AIA) offers and accepts most insurance plans that cover ABA therapy. These include BCBS AZ, Aetna, Optum, Tricare, United Healthcare AHCCCS, and UnitedHealth."
|
||||
logos:
|
||||
@@ -88,7 +93,8 @@ sections:
|
||||
- file: united-healthcare-logo-1.webp
|
||||
alt: United Healthcare
|
||||
|
||||
- type: esa
|
||||
# ESA
|
||||
esa:
|
||||
heading: Arizona Scholarship Account (ESA)
|
||||
body: >-
|
||||
Thousands of Arizona learners are currently eligible for the state funded ESA,
|
||||
@@ -100,14 +106,16 @@ sections:
|
||||
image: logo-az-dept-of-education.webp
|
||||
imageAlt: Arizona Department of Education
|
||||
|
||||
- type: financial-help
|
||||
# Financial help
|
||||
financialHelp:
|
||||
heading: Need Help Paying for Your Care?
|
||||
body: The Arizona Institute for Autism offers flexible financial assistance to the uninsured. Get the care you want or need and pay over time.
|
||||
cta:
|
||||
label: Request an Appointment
|
||||
href: /client-consultation
|
||||
|
||||
- type: process
|
||||
# Process
|
||||
process:
|
||||
heading: Our Process
|
||||
steps:
|
||||
- icon: learner-journey-step-1a.svg
|
||||
@@ -123,7 +131,8 @@ sections:
|
||||
- icon: learner-journey-step-6.svg
|
||||
label: Collaborate on a Care Plan
|
||||
|
||||
- type: director
|
||||
# Director
|
||||
director:
|
||||
heading: An Extension of Your Family
|
||||
quote: '"At AIA, We strive to provide excellent and compassionate care to all communities we serve. We could not accomplish that without excellent, passionate, and committed staff and families. We look forward to our collaboration with you as we continue to grow, serve and support our Learners in the pursuit of their individual potential."'
|
||||
photo: rula-diab.webp
|
||||
@@ -133,7 +142,8 @@ sections:
|
||||
signature: clinical-director-rula-diab.png
|
||||
signatureAlt: Clinical Director Rula Diab
|
||||
|
||||
- type: testimonials
|
||||
# Testimonials
|
||||
testimonials:
|
||||
heading: What Clients Are Saying
|
||||
items:
|
||||
- author: Claudia
|
||||
|
||||
@@ -9,6 +9,7 @@ draft: false
|
||||
---
|
||||
|
||||
import Button from '../../../components/Button.astro';
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
## Learner Social Club
|
||||
|
||||
@@ -19,13 +20,9 @@ Every child needs opportunities to have fun, make friends, and build social conn
|
||||
Our integrative wellness enrichment services include:
|
||||
|
||||
- Music
|
||||
|
||||
- Art
|
||||
|
||||
- Games
|
||||
|
||||
- Dance
|
||||
|
||||
- Recreational activities
|
||||
|
||||
These thoughtfully designed activities help nurture your learner’s mind and body, providing holistic wellness and saving you valuable time.
|
||||
@@ -35,21 +32,17 @@ These thoughtfully designed activities help nurture your learner’s mind and bo
|
||||
To ensure the best experience for your learner, please keep the following in mind:
|
||||
|
||||
- Potty Training: Learners must be potty-trained before enrolling.
|
||||
|
||||
- Wipes: Pack wipes for your learner. These can be stored at our clinic.
|
||||
|
||||
- Snack & Water: Send your learner with a snack and water. These items can also be stored on-site.
|
||||
|
||||
- Pause/Cancellation Notice: Please provide AIA staff with at least a 30-day notice if you plan to pause or cancel your Learner Social Club services.
|
||||
|
||||
### Program Schedule & Ages Served
|
||||
|
||||

|
||||
|
||||
The Learner Social Club currently serves youth learners aged 8–17 years . Our flexible scheduling options currently include:
|
||||
The Learner Social Club currently serves youth learners aged 8–17 years. Our flexible scheduling options currently include:
|
||||
|
||||
- 2 days/week (Monday, Wednesday): 4:00 PM – 6:00 PM
|
||||
|
||||
- 1 day/week (Wednesday only): 4:00 PM – 6:00 PM
|
||||
|
||||
### Payment Information
|
||||
@@ -58,6 +51,6 @@ The Learner Social Club currently serves youth learners aged 8–17 years . Our
|
||||
|
||||
Interested in Trying Out Our Program?
|
||||
|
||||
Get a 1-Day Trial Pass by emailing us at info [at] azinstitute4autism [dot] com .
|
||||
Get a 1-Day Trial Pass by emailing us at <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />.
|
||||
|
||||
<Button href="https://form.jotform.com/231638510219149" target="_blank">Enroll Now</Button>
|
||||
<Button href="https://form.jotform.com/231638510219149" target="_blank" center>Enroll Now</Button>
|
||||
|
||||
+4
-2
@@ -7,6 +7,8 @@ lang: "en"
|
||||
translationKey: "privacy-policy"
|
||||
draft: false
|
||||
---
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
Last updated: February 19, 2025
|
||||
|
||||
## Introduction
|
||||
@@ -123,10 +125,10 @@ We may update this privacy policy periodically. All changes will be posted on th
|
||||
|
||||
If you have any questions or concerns about this privacy policy or wish to exercise your privacy rights, please contact us at:
|
||||
|
||||
- Email: info@azinstitute4autism.com
|
||||
- Email: <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />
|
||||
|
||||
- Address: 8901 E. Raintree Drive, Suite #160 Scottsdale Arizona 85260
|
||||
|
||||
- Phone: [(480) 687-7099](tel:+14806877099)
|
||||
- Phone: <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />
|
||||
|
||||
By using our website and services, you confirm that you have read, understood, and agree to the terms outlined in this privacy policy.
|
||||
+4
-2
@@ -7,6 +7,8 @@ lang: "en"
|
||||
translationKey: "schedule-consultation"
|
||||
draft: false
|
||||
---
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
We're here for you!
|
||||
|
||||
A Client Advocate from Arizona Institute for Autism will contact you within one business day upon submission of this form.
|
||||
@@ -37,13 +39,13 @@ Along with ABA therapy for children and teens diagnosed with autism, our support
|
||||
|
||||
  Phone
|
||||
|
||||
(480) 687-7099
|
||||
<ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />
|
||||
|
||||

|
||||
|
||||
Email
|
||||
|
||||
info@abaclinicaz.com
|
||||
<ContactObfuscation email="info@abaclinicaz.com" obfuscatedText="info [at] abaclinicaz [dot] com" />
|
||||
|
||||

|
||||
|
||||
@@ -10,10 +10,6 @@ draft: false
|
||||
|
||||
import Button from '../../../components/Button.astro';
|
||||
|
||||
- [Home](/)
|
||||
|
||||
- Services
|
||||
|
||||
## Autism Spectrum Disorder Services
|
||||
|
||||
Autism Spectrum Disorder (ASD) refers to a group of complex brain development disorders and is characterized by difficulties with social interaction, verbal and non-verbal communication, and emotional control.
|
||||
|
||||
@@ -7,24 +7,25 @@ lang: "es"
|
||||
translationKey: "contact"
|
||||
draft: false
|
||||
---
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
import Button from '../../../components/Button.astro';
|
||||
|
||||
## Programar una visita
|
||||
|
||||
Comuníquese con uno de nuestros defensores de clientes expertos para ver si la terapia integrada con ABA es adecuada para su alumno.
|
||||
|
||||
Programar visita
|
||||
<Button href="/tour">Programar visita</Button>
|
||||
|
||||
## Comunícate
|
||||
|
||||
Si tiene preguntas sobre alguno de nuestros servicios y programas, no dude en utilizar el formulario de contacto de esta página. También puede llamar o enviar un correo electrónico utilizando la siguiente información.
|
||||
|
||||
Consultas generales: 9907-786 (084)
|
||||
**Consultas generales:** <ContactObfuscation phone="(480) 687-7099" hrefValue="+14806877099" obfuscatedText="9907-786 (084)" />
|
||||
|
||||
Consultas de facturación: 9240-807 (206)
|
||||
**Consultas de facturación:** <ContactObfuscation phone="(602) 708-0429" hrefValue="+16027080429" obfuscatedText="9240-807 (206)" />
|
||||
|
||||
Correo electrónico: moc.msitua4etutitsniza@ofni
|
||||
**Correo electrónico:** <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="moc.msitua4etutitsniza@ofni" />
|
||||
|
||||
Dirección: 8901 E. Raintree Drive, St #160 Scottsdale, AZ 85260
|
||||
**Dirección:** 8901 E. Raintree Drive, St #160 Scottsdale, AZ 85260
|
||||
|
||||
Horas: Lunes - Viernes, 8am - 6pm MST
|
||||
|
||||
### Contactar a AIA
|
||||
**Horas:** Lunes - Viernes, 8am - 6pm MST
|
||||
@@ -6,8 +6,9 @@ canonical: "https://www.azinstitute4autism.com/es"
|
||||
lang: "es"
|
||||
translationKey: "index"
|
||||
draft: false
|
||||
sections:
|
||||
- type: hero
|
||||
home:
|
||||
# Hero
|
||||
hero:
|
||||
eyebrow: Los principales expertos de Arizona
|
||||
heading: "Salud Mental y<br />Educación Especial"
|
||||
body: "Aquí en el Instituto de Autismo de Arizona (AIA), brindamos atención clínica experta para niños y adolescentes con diagnóstico de autismo. Actualmente atendemos a familias en las áreas metropolitanas de Scottsdale, Gilbert, Mesa, Tempe y Phoenix."
|
||||
@@ -17,7 +18,8 @@ sections:
|
||||
image: bcba-with-happy-toddler.webp
|
||||
imageAlt: Terapeuta BCBA con niño feliz
|
||||
|
||||
- type: services-intro
|
||||
# Servicios y compromisos
|
||||
servicesIntro:
|
||||
servicesHeading: Servicios de terapia ABA para niños y adolescentes diagnosticados con TEA
|
||||
services:
|
||||
- Apoyo a la defensa del autismo
|
||||
@@ -42,7 +44,8 @@ sections:
|
||||
commitmentsImage: playing-boy.webp
|
||||
commitmentsImageAlt: Niño jugando mientras aprende
|
||||
|
||||
- type: benefits
|
||||
# Beneficios
|
||||
benefits:
|
||||
heading: Beneficios que van más allá de un proveedor de terapia integrada típico
|
||||
subheading: La Diferencia AIA
|
||||
items:
|
||||
@@ -55,7 +58,8 @@ sections:
|
||||
videoImage: learner-journey.webp
|
||||
videoImageAlt: Video del recorrido del estudiante
|
||||
|
||||
- type: skills
|
||||
# Habilidades
|
||||
skills:
|
||||
heading: ¿Su alumno tiene dificultades con estas habilidades?
|
||||
skills:
|
||||
- icon: icon-Social_Engagement.png
|
||||
@@ -71,7 +75,8 @@ sections:
|
||||
- icon: icon-Speach.png
|
||||
label: Discurso
|
||||
|
||||
- type: insurance
|
||||
# Seguros
|
||||
insurance:
|
||||
heading: "Sí, aceptamos seguros."
|
||||
body: "Un servicio integrado todo en uno para las necesidades de educación especial de su hijo, el Instituto de Autismo de Arizona (AIA) ofrece y acepta la mayoría de los planes de seguro que cubren la terapia ABA. Estos incluyen BCBS AZ, Aetna, Optum, Tricare, United Healthcare AHCCCS y UnitedHealth."
|
||||
logos:
|
||||
@@ -88,7 +93,8 @@ sections:
|
||||
- file: united-healthcare-logo-1.webp
|
||||
alt: United Healthcare
|
||||
|
||||
- type: esa
|
||||
# ESA
|
||||
esa:
|
||||
heading: Cuenta de Becas de Arizona (ESA)
|
||||
body: >-
|
||||
Miles de estudiantes de Arizona son actualmente elegibles para la ESA financiada
|
||||
@@ -101,14 +107,16 @@ sections:
|
||||
image: logo-az-dept-of-education.webp
|
||||
imageAlt: Departamento de Educación de Arizona
|
||||
|
||||
- type: financial-help
|
||||
# Ayuda financiera
|
||||
financialHelp:
|
||||
heading: ¿Necesita ayuda para pagar su atención?
|
||||
body: El Instituto de Autismo de Arizona ofrece asistencia financiera flexible a las personas sin seguro. Obtén la atención que deseas o necesitas y paga a plazos.
|
||||
cta:
|
||||
label: Solicitar cita
|
||||
href: /es/client-consultation
|
||||
|
||||
- type: process
|
||||
# Proceso
|
||||
process:
|
||||
heading: Nuestro proceso
|
||||
steps:
|
||||
- icon: learner-journey-step-1a.svg
|
||||
@@ -124,7 +132,8 @@ sections:
|
||||
- icon: learner-journey-step-6.svg
|
||||
label: Colaborar en un Plan de Cuidados
|
||||
|
||||
- type: director
|
||||
# Directora
|
||||
director:
|
||||
heading: Una extensión de tu familia
|
||||
quote: '"En AIA, nos esforzamos por brindar atención excelente y compasiva a todas las comunidades a las que servimos. No podríamos lograr eso sin un personal y familias excelentes, apasionados y comprometidos. Esperamos con ansias nuestra colaboración con usted a medida que continuamos creciendo, sirviendo y apoyando a nuestros estudiantes en la búsqueda de su potencial individual."'
|
||||
photo: rula-diab.webp
|
||||
@@ -134,7 +143,8 @@ sections:
|
||||
signature: clinical-director-rula-diab.png
|
||||
signatureAlt: Directora Clínica Rula Diab
|
||||
|
||||
- type: testimonials
|
||||
# Testimonios
|
||||
testimonials:
|
||||
heading: Lo que dicen los clientes
|
||||
items:
|
||||
- author: Claudia
|
||||
|
||||
@@ -9,6 +9,7 @@ draft: false
|
||||
---
|
||||
|
||||
import Button from '../../../components/Button.astro';
|
||||
import ContactObfuscation from '../../../components/ContactObfuscation.astro';
|
||||
|
||||
## Learner Social Club
|
||||
|
||||
@@ -46,7 +47,7 @@ Para garantizar la mejor experiencia para su hijo/a, tenga en cuenta lo siguient
|
||||
|
||||

|
||||
|
||||
Learner Social Club actualmente atiende a jóvenes de 8 a 17 años . Nuestras opciones de horario flexible actualmente incluyen:
|
||||
Learner Social Club actualmente atiende a jóvenes de 8 a 17 años. Nuestras opciones de horario flexible actualmente incluyen:
|
||||
|
||||
- 2 días/semana (lunes y miércoles): 4:00 p. m. – 6:00 p. m.
|
||||
|
||||
@@ -58,6 +59,6 @@ Learner Social Club actualmente atiende a jóvenes de 8 a 17 años . Nuestras op
|
||||
|
||||
¿Le interesa probar nuestro programa?
|
||||
|
||||
Obtenga un pase de prueba de 1 día enviándonos un correo electrónico a info [at] azinstitute4autism [dot] com .
|
||||
Obtenga un pase de prueba de 1 día enviándonos un correo electrónico a <ContactObfuscation email="info@azinstitute4autism.com" obfuscatedText="info [at] azinstitute4autism [dot] com" />.
|
||||
|
||||
<Button href="https://form.jotform.com/231638510219149" target="_blank">Enroll Now</Button>
|
||||
|
||||
@@ -12,8 +12,7 @@ const organizationSchema = {
|
||||
'@type': 'MedicalOrganization',
|
||||
name: site.name,
|
||||
url: site.url,
|
||||
telephone: site.phone,
|
||||
email: site.email,
|
||||
// Contact details are rendered through ContactObfuscation to avoid plain text in HTML.
|
||||
address: {
|
||||
'@type': 'PostalAddress',
|
||||
streetAddress: '8901 E Raintree Dr Ste 160',
|
||||
@@ -30,8 +29,9 @@ const organizationSchema = {
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<link rel="icon" href="/assets/images/aia-logo.svg" />
|
||||
<link rel="icon" href="/assets/images/favicon.svg" />
|
||||
<Seo title={title} description={description} canonical={canonical} image={image} lang={lang} type={type} />
|
||||
<slot name="head" />
|
||||
<script type="application/ld+json" set:html={JSON.stringify(organizationSchema)} />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -1,11 +1,35 @@
|
||||
---
|
||||
import BaseLayout from './BaseLayout.astro';
|
||||
const { title, description, lang = 'en' } = Astro.props;
|
||||
import PageHero from '../components/PageHero.astro';
|
||||
const { title, description, intro = [], lang = 'en' } = Astro.props;
|
||||
const languagePrefix = lang === 'en' ? '' : `/${lang}`;
|
||||
const canonical = `https://www.azinstitute4autism.com${languagePrefix}/library`;
|
||||
---
|
||||
<BaseLayout title={title} description={description} canonical={canonical} lang={lang}>
|
||||
<header class="library-banner"><div class="container"><div class="library-banner-copy"><p class="script-label">Welcome to</p><h1>{title}</h1></div></div></header>
|
||||
<section class="library-intro"><div class="container"><h2>Library</h2><p>{description}</p></div></section>
|
||||
<PageHero title={title} image="/assets/images/hero-library-index.webp" eyebrow="Welcome to" constrain />
|
||||
<section class="library-intro">
|
||||
<div class="container">
|
||||
<h2>Library</h2>
|
||||
{intro.length ? intro.map((paragraph) => <p>{paragraph}</p>) : <p>{description}</p>}
|
||||
</div>
|
||||
</section>
|
||||
<div class="container section library-layout"><slot /></div>
|
||||
</BaseLayout>
|
||||
|
||||
<style>
|
||||
:global(.library-intro) { background: var(--color-primary); color: white; padding-block: 3rem; }
|
||||
:global(.library-intro h2) { color: white; }
|
||||
:global(.library-layout) { align-items: start; display: grid; gap: 3rem; grid-template-columns: 1fr 240px; }
|
||||
:global(.library-sidebar) { position: sticky; top: 1rem; }
|
||||
:global(.library-sidebar label) { display: block; font-weight: 700; margin-bottom: .4rem; }
|
||||
:global(.library-sidebar input) { border: 1px solid var(--color-border); border-radius: 4px; font: inherit; padding: .7rem; width: 100%; }
|
||||
:global(.library-sidebar h2) { font-size: 1.1rem; margin-top: 2rem; }
|
||||
:global(.library-sidebar ul) { list-style: none; padding: 0; }
|
||||
:global(.library-sidebar li) { border-bottom: 1px solid var(--color-border); padding-block: .65rem; }
|
||||
:global(.library-sidebar a) { color: var(--color-primary); font-size: .9rem; }
|
||||
:global(.blog-list) { display: block; }
|
||||
@media (max-width: 760px) {
|
||||
:global(.library-layout) { grid-template-columns: 1fr; }
|
||||
:global(.library-sidebar) { position: static; }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -19,3 +19,15 @@ const { entry } = Astro.props;
|
||||
</article>
|
||||
<BlogPostFooter entryId={entry.id} />
|
||||
</BaseLayout>
|
||||
|
||||
<style>
|
||||
.article-header { padding-block: 4.5rem 0; text-align: left; }
|
||||
.article-header h1 { font-size: clamp(2.3rem, 5vw, 3rem); max-width: 900px; }
|
||||
.article-byline { align-items: center; display: flex; font-size: .9rem; gap: 1rem; }
|
||||
.article-byline img { margin-top: 0; height: 52px; width: 52px; }
|
||||
.article-featured { height: 480px; margin: 3rem auto 0; max-width: 800px; overflow: hidden; }
|
||||
.article-featured img { height: 100%; margin: 0; object-fit: cover; width: 100%; }
|
||||
@media (max-width: 760px) {
|
||||
.article-featured { height: auto; }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
---
|
||||
import BaseLayout from './BaseLayout.astro';
|
||||
import FormShell from '../components/FormShell.astro';
|
||||
import TeamPage from '../components/TeamPage.astro';
|
||||
import TeamPage from '../components/pages/TeamPage.astro';
|
||||
import AboutPage from '../components/pages/AboutPage.astro';
|
||||
import ServicesPage from '../components/pages/ServicesPage.astro';
|
||||
import CareersPage from '../components/pages/CareersPage.astro';
|
||||
import ContactPage from '../components/pages/ContactPage.astro';
|
||||
import FaqPage from '../components/pages/FaqPage.astro';
|
||||
import PageHero from '../components/PageHero.astro';
|
||||
import { pageHeroImages } from '../data/page-visuals';
|
||||
const { entry } = Astro.props;
|
||||
const showForm = ['client-consultation', 'contact', 'schedule-consultation', 'referrals'].includes(entry.data.slug);
|
||||
const showForm = ['client-consultation', 'schedule-consultation', 'referrals'].includes(entry.data.slug);
|
||||
const serviceTitles: Record<string, Record<string, string>> = {
|
||||
en: {
|
||||
'aba-therapy': 'Behavioral',
|
||||
@@ -48,11 +54,20 @@ const isService = Boolean(serviceTitles[entry.data.lang]?.[entry.data.slug]);
|
||||
const heroImage = pageHeroImages[entry.data.slug];
|
||||
---
|
||||
<BaseLayout title={entry.data.title} description={entry.data.description} canonical={entry.data.canonical} image={entry.data.featuredImage || heroImage} lang={entry.data.lang}>
|
||||
<header class:list={['source-page-banner', { 'has-source-image': heroImage, 'service-banner': isService }]} style={heroImage ? `background-image: url("${heroImage}")` : undefined}>
|
||||
<div class="container"><h1>{bannerTitle}</h1></div>
|
||||
</header>
|
||||
{entry.data.slug === 'contact' && <Fragment slot="head"><link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" /></Fragment>}
|
||||
<PageHero title={bannerTitle} subtitle={entry.data.slug === 'faqs' ? 'FAQs' : undefined} image={heroImage} constrain />
|
||||
{entry.data.slug === 'team' && entry.data.lang === 'en'
|
||||
? <TeamPage />
|
||||
: entry.data.slug === 'about' && entry.data.lang === 'en'
|
||||
? <AboutPage />
|
||||
: entry.data.slug === 'services' && entry.data.lang === 'en'
|
||||
? <ServicesPage />
|
||||
: entry.data.slug === 'careers' && entry.data.lang === 'en'
|
||||
? <CareersPage />
|
||||
: entry.data.slug === 'faqs' && entry.data.lang === 'en'
|
||||
? <FaqPage><slot /></FaqPage>
|
||||
: entry.data.slug === 'contact'
|
||||
? <ContactPage title={bannerTitle}><slot /></ContactPage>
|
||||
: <article class:list={['prose', 'source-page', 'container', { 'service-page': isService }]}><slot /></article>}
|
||||
{showForm && <FormShell title={bannerTitle} showBackground={entry.data.slug === 'client-consultation'} />}
|
||||
</BaseLayout>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
import Hero from '../../components/Hero.astro';
|
||||
import HomeHero from '../../components/home/HomeHero.astro';
|
||||
import BlogCard from '../../components/BlogCard.astro';
|
||||
const posts = (await getCollection('blog', ({ data }) => data.lang === 'ar' && !data.draft)).slice(0, 3);
|
||||
---
|
||||
<BaseLayout title="معهد أريزونا للتوحد" description="موارد ودعم للأسر والأطفال المصابين بالتوحد." canonical="https://www.azinstitute4autism.com/ar" lang="ar">
|
||||
<Hero eyebrow="Arizona Institute for Autism" title="الصحة السلوكية والتعليم الخاص" description="محتوى عربي متاح من مكتبة معهد أريزونا للتوحد." image="/assets/images/playing-boy.webp" alt="" />
|
||||
<HomeHero section={{ type: 'hero', eyebrow: 'Arizona Institute for Autism', heading: 'الصحة السلوكية والتعليم الخاص', body: 'محتوى عربي متاح من مكتبة معهد أريزونا للتوحد.', cta: { label: 'ابدأ الآن', href: '/ar' }, image: 'playing-boy.webp', imageAlt: '' }} />
|
||||
<section class="section"><div class="container"><div class="section-heading"><h2>المكتبة</h2></div><div class="card-grid">{posts.map((post) => <BlogCard post={post} prefix="/ar" />)}</div></div></section>
|
||||
</BaseLayout>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
import HomePage from '../../components/HomePage.astro';
|
||||
import HomePage from '../../components/pages/HomePage.astro';
|
||||
---
|
||||
<HomePage lang="es" />
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
---
|
||||
import HomePage from '../components/HomePage.astro';
|
||||
import HomePage from '../components/pages/HomePage.astro';
|
||||
---
|
||||
<HomePage lang="en" />
|
||||
|
||||
@@ -5,7 +5,14 @@ import BlogCard from '../../components/BlogCard.astro';
|
||||
const posts = (await getCollection('blog', ({ data }) => data.lang === 'en' && !data.draft)).sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf());
|
||||
const popular = posts.slice(0, 5);
|
||||
---
|
||||
<BlogIndexLayout title="The Library at AZ Institute for Autism" description="Welcome to the Library at AIA, where we share valuable insights, strategies, and resources to support individuals with autism, their families, and professionals in the field. Our articles explore key topics in Applied Behavior Analysis (ABA) therapy, community events, success stories, and expert guidance.">
|
||||
<BlogIndexLayout
|
||||
title="The Library at AZ Institute for Autism"
|
||||
description="Welcome to the Library at AIA, where we share valuable insights, strategies, and resources to support individuals with autism, their families, and professionals in the field. Our articles explore key topics in Applied Behavior Analysis (ABA) therapy, community events, success stories, and expert guidance."
|
||||
intro={[
|
||||
"Welcome to the Library at AIA, where we share valuable insights, strategies, and resources to support individuals with autism, their families, and professionals in the field. Our articles explore key topics in Applied Behavior Analysis (ABA) therapy, including teaching self-advocacy, proactive and reactive strategies, and innovative intervention techniques.",
|
||||
"We also highlight community events, success stories, and expert guidance to foster understanding and empowerment. Whether you're a parent, caregiver, educator, or advocate, our goal is to provide meaningful content that helps children with autism reach their highest potential in a compassionate and supportive environment. Stay connected with us as we continue to share knowledge and celebrate progress!",
|
||||
]}
|
||||
>
|
||||
<div class="blog-list">{posts.map((post) => <BlogCard post={post} />)}</div>
|
||||
<aside class="library-sidebar">
|
||||
<label for="library-search">Search</label>
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
const allowIndexing = import.meta.env.PUBLIC_ALLOW_INDEXING === 'true';
|
||||
|
||||
const body = allowIndexing
|
||||
? [
|
||||
'User-agent: *',
|
||||
'Allow: /',
|
||||
'Sitemap: https://www.azinstitute4autism.com/sitemap.xml',
|
||||
''
|
||||
].join('\n')
|
||||
: [
|
||||
'User-agent: *',
|
||||
'Allow: /',
|
||||
'# Staging and migration builds emit meta robots noindex,nofollow.',
|
||||
''
|
||||
].join('\n');
|
||||
|
||||
export function GET() {
|
||||
return new Response(body, {
|
||||
headers: {
|
||||
'Content-Type': 'text/plain; charset=utf-8'
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
.prose { padding-block: var(--space-xl); }
|
||||
.prose h2, .prose h3 { margin-top: 2em; }
|
||||
.prose h2, .prose h3 { margin-top: 1.75em; }
|
||||
.prose img { border-radius: var(--radius-md); margin-block: var(--space-lg); }
|
||||
.prose a { overflow-wrap: anywhere; text-decoration: none; }
|
||||
.prose p a, .prose td a { color: var(--color-accent-strong); text-decoration: none; }
|
||||
@@ -9,15 +9,9 @@
|
||||
.blog-post-body blockquote p { color: var(--color-primary); margin: 0 0 1.55rem; }
|
||||
.source-page { max-width: 980px; }
|
||||
.source-page > h2:first-of-type { margin-top: 0; }
|
||||
.service-page > p > img, .service-page > img { float: right; margin: .5rem 0 1.5rem 2rem; max-height: 230px; max-width: 300px; object-fit: cover; }
|
||||
.service-page h3 { font-size: 2rem; }
|
||||
.service-page h3 + p { color: var(--color-accent-strong); font-family: var(--font-accent); font-size: 1.5rem; margin-bottom: -.8rem; }
|
||||
.blog-post-body { max-width: 960px; }
|
||||
.blog-post-body p { margin-bottom: 1.55rem; }
|
||||
.blog-post-body table { border: 1px solid #d7d9e3; border-collapse: collapse; display: table; margin: 0 0 1.4rem; width: 100%; }
|
||||
.blog-post-body td, .blog-post-body th { border: 1px solid #d7d9e3; padding: 10px; }
|
||||
.blog-post-body th { background: var(--color-primary); color: #fff; }
|
||||
.blog-post-body td { background: #fff; color: var(--color-primary); }
|
||||
@media (max-width: 700px) {
|
||||
.service-page > p > img, .service-page > img { float: none; margin: 1.5rem 0; max-width: 100%; width: 100%; }
|
||||
}
|
||||
|
||||
@@ -1,141 +1,10 @@
|
||||
.utility-bar { background: var(--color-primary); color: white; font-size: .85rem; }
|
||||
.utility-inner { align-items: center; display: flex; gap: var(--space-md); justify-content: flex-end; min-height: 38px; }
|
||||
.utility-bar a { color: white; text-decoration: none; }
|
||||
.lang-switcher { position: relative; }
|
||||
.lang-switcher__trigger { align-items: center; color: var(--color-primary); cursor: pointer; display: flex; font-size: .85rem; font-weight: 700; gap: .35rem; }
|
||||
.lang-switcher__trigger svg { flex-shrink: 0; }
|
||||
.lang-switcher__menu { background: white; box-shadow: var(--shadow-md); display: none; left: 50%; list-style: none; margin: 0; min-width: 110px; padding: .5rem 0 .4rem; position: absolute; top: 100%; transform: translateX(-50%); z-index: 10; }
|
||||
.lang-switcher__menu a { color: rgb(83 83 91); display: block; font-size: .85rem; padding: .4rem .9rem; text-decoration: none; white-space: nowrap; }
|
||||
.lang-switcher__menu a:hover { background: var(--color-primary); color: white; }
|
||||
.lang-switcher__menu a[aria-current="page"] { color: var(--color-accent); font-weight: 700; }
|
||||
.lang-switcher:hover .lang-switcher__menu,
|
||||
.lang-switcher:focus-within .lang-switcher__menu { display: block; }
|
||||
.site-header { background: white; box-shadow: var(--shadow-sm); position: relative; z-index: 5; }
|
||||
.header-inner { align-items: center; display: flex; gap: 1.4rem; min-height: 110px; }
|
||||
.brand { margin-right: auto; }
|
||||
.brand img { width: 150px; }
|
||||
.main-nav ul { display: flex; gap: 1.4rem; list-style: none; margin: 0; padding: 0; }
|
||||
.main-nav li { position: relative; }
|
||||
.main-nav a { color: var(--color-primary); font-size: .9rem; text-decoration: none; }
|
||||
.main-nav a:hover { color: var(--color-accent-strong); }
|
||||
.main-nav .submenu { background: white; box-shadow: var(--shadow-md); display: none; gap: 0; left: -1rem; min-width: 180px; padding: .75rem 0; position: absolute; top: 100%; }
|
||||
.main-nav .submenu a { display: block; padding: .45rem 1rem; }
|
||||
.main-nav li:hover > .submenu, .main-nav li:focus-within > .submenu { display: block; }
|
||||
.mobile-nav { display: none; }
|
||||
.button { background: var(--color-accent); border: 2px solid var(--color-accent); border-radius: 4px; color: var(--color-primary); display: inline-block; padding: .65rem 1.2rem; text-decoration: none; }
|
||||
.button:hover { background: transparent; border-color: var(--color-accent-strong); color: var(--color-primary); }
|
||||
.button-small { font-size: .9rem; }
|
||||
.button-light { background: white; color: var(--color-primary-dark); }
|
||||
.hero { background: var(--color-tint); overflow: hidden; padding-block: clamp(3rem, 7vw, 5rem); }
|
||||
.hero-grid { align-items: center; display: grid; gap: var(--space-xl); grid-template-columns: 1.05fr .95fr; }
|
||||
.hero img { max-height: 430px; object-fit: contain; width: 100%; }
|
||||
.card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-md); overflow: hidden; }
|
||||
.card img { aspect-ratio: 16/10; object-fit: cover; width: 100%; }
|
||||
.card-body, .location-card { padding: var(--space-lg); }
|
||||
.card-body { padding: var(--space-lg); }
|
||||
.card h2, .card h3 { margin-top: 0; }
|
||||
.card h2 a, .card h3 a { color: inherit; text-decoration: none; }
|
||||
.text-link { font-weight: 700; }
|
||||
.insurance-strip { background: white; border-block: 1px solid var(--color-border); padding-block: var(--space-lg); text-align: center; }
|
||||
.insurance-strip h2 { font-size: 1.4rem; }
|
||||
.logo-row { align-items: center; display: flex; flex-wrap: wrap; justify-content: space-around; }
|
||||
.logo-row img { filter: grayscale(1); max-height: 55px; max-width: 130px; }
|
||||
.cta-band { background: var(--color-primary); color: white; padding-block: var(--space-xl); }
|
||||
.cta-band h2, .cta-band .eyebrow { color: white; margin: 0; }
|
||||
.site-footer { background: var(--color-primary-dark); color: white; padding-block: var(--space-xl) var(--space-md); }
|
||||
.footer-grid { display: grid; gap: var(--space-xl); grid-template-columns: 1fr 1fr 1.5fr; }
|
||||
.site-footer h2, .site-footer a { color: white; }
|
||||
.site-footer h2 { font-size: 1.25rem; }
|
||||
.site-footer ul { list-style: none; padding: 0; }
|
||||
.site-footer li { margin-bottom: .35rem; }
|
||||
.social-links { display: flex; gap: .75rem; }
|
||||
.social-links a { color: var(--color-accent); font-weight: 700; }
|
||||
.footer-bottom { border-top: 1px solid rgb(255 255 255 / 20%); display: flex; justify-content: space-between; margin-top: var(--space-lg); padding-top: var(--space-md); }
|
||||
.article-header { padding-block: var(--space-xl) var(--space-lg); text-align: center; }
|
||||
.article-header h1 { font-size: clamp(2.3rem, 6vw, 4.6rem); }
|
||||
.article-header img { border-radius: var(--radius-lg); margin-top: var(--space-lg); width: 100%; }
|
||||
.like-view-counter { align-items: center; border-top: 1px solid var(--color-border); display: flex; gap: var(--space-lg); margin-block: var(--space-xl); padding-top: var(--space-md); }
|
||||
.like-view-counter button { background: white; border: 1px solid var(--color-border); border-radius: 999px; padding: .6rem 1rem; }
|
||||
.like-view-counter button.liked { background: var(--color-primary-dark); border-color: var(--color-primary-dark); color: white; }
|
||||
.like-view-counter button:disabled { cursor: wait; opacity: .65; }
|
||||
.source-page-banner { background: var(--color-tint); padding-block: 4rem; text-align: center; }
|
||||
.source-page-banner h1 { margin: 0; }
|
||||
.source-page-banner.has-source-image { background-color: var(--color-tint); background-position: center; background-repeat: no-repeat; background-size: cover; padding-block: 10rem; text-align: left; }
|
||||
.source-page-banner.has-source-image h1 { max-width: 600px; }
|
||||
.library-banner { background-color: var(--color-tint); background-image: url('/assets/images/hero-library-index.webp'); background-position: center; background-repeat: no-repeat; background-size: cover; padding-block: 10rem; text-align: left; }
|
||||
.library-banner-copy { max-width: 600px; }
|
||||
.library-banner h1 { margin: 0; }
|
||||
.library-intro { background: var(--color-primary); color: white; padding-block: 3rem; }
|
||||
.library-intro h2 { color: white; }
|
||||
.library-layout { align-items: start; display: grid; gap: 3rem; grid-template-columns: 1fr 240px; }
|
||||
.library-sidebar { position: sticky; top: 1rem; }
|
||||
.library-sidebar label { display: block; font-weight: 700; margin-bottom: .4rem; }
|
||||
.library-sidebar input { border: 1px solid var(--color-border); border-radius: 4px; font: inherit; padding: .7rem; width: 100%; }
|
||||
.library-sidebar h2 { font-size: 1.1rem; margin-top: 2rem; }
|
||||
.library-sidebar ul { list-style: none; padding: 0; }
|
||||
.library-sidebar li { border-bottom: 1px solid var(--color-border); padding-block: .65rem; }
|
||||
.library-sidebar a { color: var(--color-primary); font-size: .9rem; }
|
||||
.blog-list { display: grid; gap: 2rem; }
|
||||
.blog-list .blog-card { box-shadow: none; display: grid; grid-template-columns: 240px 1fr; }
|
||||
.blog-list .blog-card > a img { aspect-ratio: 4 / 3; height: 100%; }
|
||||
.blog-card-meta { align-items: center; display: flex; font-size: .78rem; gap: .75rem; }
|
||||
.blog-card-meta img { aspect-ratio: 1; border-radius: 50%; height: 42px; width: 42px; }
|
||||
.blog-card h3 { font-size: 1.35rem; }
|
||||
.article-header { padding-block: 4.5rem 0; text-align: left; }
|
||||
.article-header h1 { font-size: clamp(2.3rem, 5vw, 3rem); max-width: 900px; }
|
||||
.article-byline { align-items: center; display: flex; font-size: .9rem; gap: 1rem; }
|
||||
.article-byline img { margin-top: 0; height: 52px; width: 52px; }
|
||||
.article-featured { height: 480px; margin: 3rem auto 0; max-width: 800px; overflow: hidden; }
|
||||
.article-featured img { height: 100%; margin: 0; object-fit: cover; width: 100%; }
|
||||
.team-intro { padding-block: 4rem; text-align: center; }
|
||||
.team-intro .script-label { font-size: 1.8rem; }
|
||||
.team-group { padding-block: 2rem 4rem; text-align: center; }
|
||||
.team-group > h2 { margin: 0 auto 2.5rem; max-width: 760px; }
|
||||
.team-grid { display: grid; gap: 2rem 1.5rem; grid-template-columns: repeat(4, minmax(0, 1fr)); justify-content: center; }
|
||||
.team-member img { aspect-ratio: 1 / 1.08; border: 5px solid var(--color-primary-dark); border-radius: 15px; object-fit: cover; width: 100%; }
|
||||
.team-member h3 { font-size: 1.1rem; margin-bottom: .25rem; }
|
||||
.team-member p { margin: 0; }
|
||||
.team-careers { background: var(--color-tint); padding-block: 5rem; text-align: center; }
|
||||
@media (max-width: 950px) { .main-nav, .header-inner > .button { display: none; } .mobile-nav { display: block; } .mobile-nav .main-nav { display: block; } .mobile-nav .main-nav ul { align-items: flex-start; flex-direction: column; padding: var(--space-md); } .hero-grid, .footer-grid { grid-template-columns: 1fr; } }
|
||||
.source-list { margin-block: 0 1.5rem; padding-inline-start: 2.5rem; }
|
||||
.source-list li { line-height: 1.625; margin: 0; padding-inline-start: .15rem; }
|
||||
.source-list li::marker { color: var(--color-accent); }
|
||||
.source-list li > p { margin-block: 0; }
|
||||
.video-card { background: none; border: none; cursor: pointer; display: block; padding: 0; position: relative; }
|
||||
.video-card img { width: 100%; }
|
||||
.video-card span { align-items: center; background: var(--color-accent); border-radius: 50%; color: white; display: flex; height: 64px; justify-content: center; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 64px; z-index: 1; }
|
||||
.video-card::before, .video-card::after { animation-duration: 3s; animation-iteration-count: infinite; animation-name: video-ripple; animation-timing-function: cubic-bezier(.65, 0, .34, 1); border: 8px solid var(--color-accent); border-radius: 50%; content: ""; height: 64px; left: 50%; opacity: 0; position: absolute; top: 50%; width: 64px; }
|
||||
.video-card::before { animation-delay: .5s; }
|
||||
@keyframes video-ripple { 0% { opacity: 1; transform: translate(-50%, -50%) scale3d(.75, .75, 1); } to { opacity: 0; transform: translate(-50%, -50%) scale3d(1.5, 1.5, 1); } }
|
||||
.video-dialog { background: none; border: none; box-sizing: border-box; max-width: min(90vw, 900px); padding: 1rem 1rem 0 0; width: 100%; }
|
||||
.video-dialog::backdrop { background: rgba(0, 0, 0, .85); }
|
||||
.video-dialog-inner { position: relative; }
|
||||
.video-dialog-frame { aspect-ratio: 16 / 9; width: 100%; }
|
||||
.video-dialog-frame iframe { border: none; height: 100%; width: 100%; }
|
||||
.video-dialog-close { background: white; border: none; border-radius: 50%; cursor: pointer; font-size: 1rem; height: 2rem; line-height: 2rem; position: absolute; right: -1rem; top: -1rem; width: 2rem; }
|
||||
.process-section h2, .testimonial-section h2 { text-align: center; }
|
||||
.process-grid { display: grid; gap: 1rem; grid-template-columns: repeat(3, 1fr); margin-top: 2.5rem; }
|
||||
.process-grid div { background: white; min-height: 190px; padding: 3.2rem 1rem; position: relative; text-align: center; transition: transform .3s ease-in-out; }
|
||||
.process-grid div:hover { transform: scale(1.05); z-index: 1; }
|
||||
.process-grid img { margin: 0 auto 1rem; width: 42%; }
|
||||
.testimonial-section blockquote { margin: 0 auto; max-width: 720px; padding: 0 2rem; text-align: center; }
|
||||
.testimonial-author { font-size: 1.25rem; font-weight: 700; margin-bottom: .5rem; }
|
||||
.testimonial-swiper { --swiper-pagination-bullet-horizontal-gap: 1vw; padding-bottom: 3rem !important; }
|
||||
.testimonial-swiper .swiper-pagination-bullet { background-color: var(--color-accent); opacity: 1; }
|
||||
.testimonial-swiper .swiper-pagination-bullet-active { background-color: var(--color-accent-strong); }
|
||||
.testimonial-swiper .swiper-button-next, .testimonial-swiper .swiper-button-prev { color: var(--color-accent); }
|
||||
.testimonial-swiper .swiper-button-next:hover, .testimonial-swiper .swiper-button-prev:hover { color: var(--color-accent-strong); }
|
||||
@media (max-width: 760px) {
|
||||
.utility-inner { justify-content: center; }
|
||||
.header-inner { min-height: 88px; }
|
||||
.header-inner .lang-switcher { margin-left: auto; }
|
||||
.process-grid { grid-template-columns: 1fr 1fr; }
|
||||
.footer-bottom { align-items: flex-start; flex-direction: column; }
|
||||
.library-layout { grid-template-columns: 1fr; }
|
||||
.library-sidebar { position: static; }
|
||||
.blog-list .blog-card { grid-template-columns: 1fr; }
|
||||
.article-featured { height: auto; }
|
||||
.team-grid { grid-template-columns: 1fr; }
|
||||
.source-page-banner.has-source-image, .library-banner { padding-block: 6.25rem; text-align: center; }
|
||||
.source-page-banner.has-source-image h1, .library-banner-copy { margin-inline: auto; }
|
||||
}
|
||||
@media (min-width: 761px) and (max-width: 1050px) { .team-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
@import './components.css';
|
||||
@import './forms.css';
|
||||
@import './blog.css';
|
||||
@import './pages.css';
|
||||
|
||||
@@ -3,6 +3,7 @@ html { scroll-behavior: smooth; }
|
||||
body { background: var(--color-background); margin: 0; overflow-x: hidden; }
|
||||
img { display: block; height: auto; max-width: 100%; }
|
||||
.container, .container-narrow { margin-inline: auto; padding-inline: 20px; width: min(100%, var(--container)); }
|
||||
.container-w { width: min(100%, var(--container-w)); }
|
||||
.container-narrow { width: min(100%, 820px); }
|
||||
.section { padding-block: clamp(3rem, 7vw, 5rem); }
|
||||
.section-tint, .page-header { background: var(--color-tint); }
|
||||
@@ -13,6 +14,5 @@ img { display: block; height: auto; max-width: 100%; }
|
||||
.skip-link:focus { top: 1rem; }
|
||||
.page-header { padding-block: var(--space-xl); text-align: center; }
|
||||
.feature-grid { align-items: center; display: grid; gap: clamp(2rem, 6vw, 5rem); grid-template-columns: 1fr 1fr; }
|
||||
.cream-section { background: var(--color-tint); }
|
||||
@media (max-width: 850px) { .card-grid { grid-template-columns: 1fr; } .split { align-items: flex-start; flex-direction: column; } }
|
||||
@media (max-width: 760px) { .feature-grid { grid-template-columns: 1fr; } }
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user