← back to Homesonspec
feat(homesonspec): Silverthorne Homes (Indianapolis CPG) collector (TK-10487)
f0d509babf032a8213465bd65520348dc5927f9b · 2026-08-30 12:00:50 -0700 · Steve
Cycle-3 CPG collector for Silverthorne Homes — Arbor's luxury sister company
(JSON-LD sameAs -> linkedin.com/company/yourarborhome), Indianapolis, Clayton
Properties Group. Source silverthornehomes.com (same React-SSR JSON-LD platform
as arbor; --compressed required — server gzips). Identity verified: Indiana
(McCordsville), not the Colorado town.
Source of truth = per-home JSON-LD SingleFamilyResidence/Product + HomeOverview
spec list. HONEST inventory: Silverthorne is low-volume luxury — the sitemap
lists exactly 1 available spec home; captured it, floor set to the real count (1),
NOT padded. Selector drift from arbor handled: garage IS published here (parsed,
not null'd); status derived from HomeOverview_lead prose via statusFromLead.
Cody gate: extraction confirmed correct + inventory-honest; N=1 test-quality holes
fixed — added an exact-value SNAPSHOT test pinning all 14 fields (coverage-% is
tautological at N=1; the snapshot is what actually catches a misparse — proven to
fail on a flipped value), documented the N=1 distinct-assertion limitation, and
disclosed the GTM scrub in _urls.tsv. tsc 0; vitest 10/10. Local build/test only;
wiring/ingest/seed/deploy gated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Files touched
A collectors/silverthorne/.gitignoreA collectors/silverthorne/fixtures/homes/_urls.tsvA collectors/silverthorne/fixtures/homes/home-01.htmlA collectors/silverthorne/package.jsonA collectors/silverthorne/src/index.tsA collectors/silverthorne/src/selftest.test.tsA collectors/silverthorne/tsconfig.json
Diff
commit f0d509babf032a8213465bd65520348dc5927f9b
Author: Steve <steve@designerwallcoverings.com>
Date: Sun Aug 30 12:00:50 2026 -0700
feat(homesonspec): Silverthorne Homes (Indianapolis CPG) collector (TK-10487)
Cycle-3 CPG collector for Silverthorne Homes — Arbor's luxury sister company
(JSON-LD sameAs -> linkedin.com/company/yourarborhome), Indianapolis, Clayton
Properties Group. Source silverthornehomes.com (same React-SSR JSON-LD platform
as arbor; --compressed required — server gzips). Identity verified: Indiana
(McCordsville), not the Colorado town.
Source of truth = per-home JSON-LD SingleFamilyResidence/Product + HomeOverview
spec list. HONEST inventory: Silverthorne is low-volume luxury — the sitemap
lists exactly 1 available spec home; captured it, floor set to the real count (1),
NOT padded. Selector drift from arbor handled: garage IS published here (parsed,
not null'd); status derived from HomeOverview_lead prose via statusFromLead.
Cody gate: extraction confirmed correct + inventory-honest; N=1 test-quality holes
fixed — added an exact-value SNAPSHOT test pinning all 14 fields (coverage-% is
tautological at N=1; the snapshot is what actually catches a misparse — proven to
fail on a flipped value), documented the N=1 distinct-assertion limitation, and
disclosed the GTM scrub in _urls.tsv. tsc 0; vitest 10/10. Local build/test only;
wiring/ingest/seed/deploy gated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
collectors/silverthorne/.gitignore | 1 +
collectors/silverthorne/fixtures/homes/_urls.tsv | 2 +
.../silverthorne/fixtures/homes/home-01.html | 5 +
collectors/silverthorne/package.json | 15 +
collectors/silverthorne/src/index.ts | 471 +++++++++++++++++++++
collectors/silverthorne/src/selftest.test.ts | 315 ++++++++++++++
collectors/silverthorne/tsconfig.json | 1 +
7 files changed, 810 insertions(+)
diff --git a/collectors/silverthorne/.gitignore b/collectors/silverthorne/.gitignore
new file mode 100644
index 00000000..c2658d7d
--- /dev/null
+++ b/collectors/silverthorne/.gitignore
@@ -0,0 +1 @@
+node_modules/
diff --git a/collectors/silverthorne/fixtures/homes/_urls.tsv b/collectors/silverthorne/fixtures/homes/_urls.tsv
new file mode 100644
index 00000000..d4a65246
--- /dev/null
+++ b/collectors/silverthorne/fixtures/homes/_urls.tsv
@@ -0,0 +1,2 @@
+# NOTE: fixtures are raw --compressed captures EXCEPT the analytics token was scrubbed (live GTM-M3G7TJQ -> GTM-XXXXXXX). Home facts (address/price/beds/JSON-LD) are untouched. Lines without a tab are ignored by the selftest url map.
+home-01.html https://www.silverthornehomes.com/homes/indiana/mccordsville/haven-ponds/4877-haven-ponds-drive
diff --git a/collectors/silverthorne/fixtures/homes/home-01.html b/collectors/silverthorne/fixtures/homes/home-01.html
new file mode 100644
index 00000000..a555eccb
--- /dev/null
+++ b/collectors/silverthorne/fixtures/homes/home-01.html
@@ -0,0 +1,5 @@
+<!-- source-url: https://www.silverthornehomes.com/homes/indiana/mccordsville/haven-ponds/4877-haven-ponds-drive -->
+<!doctype html><html lang="en"><head><script>!function(e,t,a,n,g){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var m=t.getElementsByTagName(a)[0],r=t.createElement(a);r.async=!0,r.src="https://www.googletagmanager.com/gtm.js?id=GTM-XXXXXXX",m.parentNode.insertBefore(r,m)}(window,document,"script","dataLayer")</script><title data-react-helmet="true">4877 Haven Ponds Drive | New Home McCordsville</title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="theme-color" content="#000000"><meta data-react-helmet="true" name="description" content="Quick move in home for sale in McCordsville! Silverthorne has homes for sale in Indiana. Find quick move in homes or spec homes in new subdivisions near me."/><meta data-react-helmet="true" property="og:image" content="https://dlqxt4mfnxo6k.cloudfront.net/silverthornehomes.com/aHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2J1aWxkZXJjbG91ZC9mNzcxODkxYWJhNjg1OGMzZTYzOWZiMmEwOTM2Zjg0Ni5qcGVn/1200/1200"/><meta data-react-helmet="true" property="og:title" content="4877 Haven Ponds Drive | New Home McCordsville"/><meta data-react-helmet="true" property="og:description" content="Quick move in home for sale in McCordsville! Silverthorne has homes for sale in Indiana. Find quick move in homes or spec homes in new subdivisions near me."/><link rel="manifest" href="/manifest.json"><link rel="shortcut icon" href="/favicon.ico"><link rel="stylesheet" href="https://use.typekit.net/djr4sik.css"><link rel="stylesheet" href="https://use.typekit.net/bhe2vpd.css"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Rubik:wght@300;400;700;800;900&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"/><link data-react-helmet="true" rel="canonical" href="https://www.silverthornehomes.com/homes/indiana/mccordsville/haven-ponds/4877-haven-ponds-drive"/><script data-react-helmet="true" type="application/ld+json">{"@context":"http://schema.org","@type":["Organization","LocalBusiness","HomeAndConstructionBusiness"],"address":{"addressLocality":"Indianapolis","@type":"PostalAddress","addressCountry":"US","addressRegion":"IN","streetAddress":"9225 Harrison Park Court","postalCode":"46216"},"description":"Silverthorne Homes’ team of experienced professionals are eager to provide unparalleled expertise in every aspect of luxury home building. Our goal is to make certain we understand each customer’s specific needs in helping them design a home that fulfills their desire for personal choice and meets their financial investment criteria.","name":"Silverthorne Homes","telephone":"(317) 842 - 1875","image":"https://s3.amazonaws.com/buildercloud/2493f910adb57e5db700bd1fa53b8ac9.png","logo":{"contentUrl":"https://s3.amazonaws.com/buildercloud/2493f910adb57e5db700bd1fa53b8ac9.png","@type":"ImageObject","url":"https://www.silverthornehomes.com"},"geo":{"@type":"GeoCoordinates","latitude":39.852662,"longitude":-86.005368},"sameAs":["https://www.facebook.com/silverthornehomes","https://www.linkedin.com/company/yourarborhome/","https://www.instagram.com/silverthornehomes/","https://www.google.com/maps/place/Silverthorne+Homes+LLC/@39.8526583,-86.0053588,15z/data=!4m2!3m1!1s0x0:0xf55454e4a626cebb?sa=X&ved=2ahUKEwiB66_bgvbhAhVHba0KHfUJA8AQ_BIwDnoECAgQCA"],"url":"https://www.silverthornehomes.com"}</script><script data-react-helmet="true" type="application/ld+json">{"@context":"http://schema.org","@type":["SingleFamilyResidence","Product"],"name":"4877 Haven Ponds Drive McCordsville, IN, 46055","address":{"addressLocality":"McCordsville","addressRegion":"IN","streetAddress":"4877 Haven Ponds Drive","postalCode":"46055","@type":"PostalAddress"},"url":"https://www.silverthornehomes.com/homes/indiana/mccordsville/haven-ponds/4877-haven-ponds-drive","mainEntityOfPage":"https://www.silverthornehomes.com/homes/indiana/mccordsville/haven-ponds/4877-haven-ponds-drive","containedIn":{"@context":"http://schema.org","@type":["Place"],"additionalType":["http://www.productontology.org/id/Subdivision_(land)"],"name":"Haven Ponds","description":"Welcome Home to Haven Ponds by Silverthorne Homes!\n\nLooking for a new home close to friends and family yet nestled in a peaceful neighborhood with access to top-rated schools? Discover a rare opportunity to own a new construction home just a short drive from Fishers and Lawrence.\n\nDiscover McCordsville\nMcCordsville is a rapidly growing community that blends small-town charm with modern conveniences. This welcoming city values education, community, and progress. Here, you'll enjoy a variety of dining options, cozy cafés, and spacious parks.\n\nSavor a delicious meal in downtown Fortville at Taxman Brewing Company or Foxgardin Kitchen and Ale, or enjoy happy hour at any of the numerous restaurants in The District at Fishers. For outdoor recreation, explore the scenic trails at Flat Fork Creek Park, Geist Waterfront Park, or Fort Harrison State Park. There’s something for everyone in and around McCordsville!\n\nA Community to Call Home\nHaven Ponds features thoughtfully designed ranch and two-story floor plans with exceptional quality, charm, and curb appeal. Find your perfect home in this vibrant community and create new memories while celebrating life’s best moments.","address":{"addressLocality":"McCordsville","addressRegion":"IN","streetAddress":"4963 Rosie Boulevard","postalCode":"46055","@type":"PostalAddress"},"geo":{"@type":"GeoCoordinates","latitude":39.9242425,"longitude":-85.8984087}},"image":"https://s3.amazonaws.com/buildercloud/f771891aba6858c3e639fb2a0936f846.jpeg","geo":{"@type":"GeoCoordinates","latitude":39.926733,"longitude":-85.89752},"offers":[{"@type":"Offer","price":482995,"priceCurrency":"USD"}],"brand":{"@type":"Brand","name":"Silverthorne Homes"},"description":"Quick move in home for sale in McCordsville! Silverthorne has homes for sale in Indiana. Find quick move in homes or spec homes in new subdivisions near me.","productId":"67324b4e14490af34e088cb1","sku":"67324b4e14490af34e088cb1"}</script><!--[if lte IE 8]>
+ <script charset="utf-8" type="text/javascript" src="//js.hsforms.net/forms/v2-legacy.js"></script>
+ <![endif]--><script charset="utf-8" type="text/javascript" src="//js.hsforms.net/forms/v2.js"></script><meta name="facebook-domain-verification" content="o6gruflu8qaezkovi2cb7l0ze7rmsk"/><script type="text/javascript" src="https://privacy.claytonhomes.com/ccpa/v5/index.min.js"></script><link href="/static/css/main.83869280.css" rel="stylesheet"></head><body class="body"><script src="https://cmp.osano.com/AzZd2RTbLigwQ5KJW/3b01a159-a627-47e4-8e71-499b928de675/osano.js"></script><style>.osano-cm-widget{display:none}.osano-cm-dialog{display:none}</style><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-XXXXXXX" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"><style data-emotion-css="128nked etfgh 1bhxl8k">.text-brand1{color:#79C4B1;}.bg-brand1{background-color:#79C4B1;}.text-brand1Dark{color:#6ebfab;}.bg-brand1Dark{background-color:#6ebfab;}.text-brand1Darker{color:#64bba5;}.bg-brand1Darker{background-color:#64bba5;}.text-brand1Darkest{color:#59b69e;}.bg-brand1Darkest{background-color:#59b69e;}.text-brand1Light{color:#84c9b7;}.bg-brand1Light{background-color:#84c9b7;}.text-brand1Lighter{color:#8ecdbd;}.bg-brand1Lighter{background-color:#8ecdbd;}.text-brand1Lightest{color:#99d2c4;}.bg-brand1Lightest{background-color:#99d2c4;}.text-brand2{color:#BFDDBD;}.bg-brand2{background-color:#BFDDBD;}.text-brand2Dark{color:#b5d8b3;}.bg-brand2Dark{background-color:#b5d8b3;}.text-brand2Darker{color:#abd3a9;}.bg-brand2Darker{background-color:#abd3a9;}.text-brand2Darkest{color:#a2cd9f;}.bg-brand2Darkest{background-color:#a2cd9f;}.text-brand2Light{color:#c9e2c7;}.bg-brand2Light{background-color:#c9e2c7;}.text-brand2Lighter{color:#d3e7d1;}.bg-brand2Lighter{background-color:#d3e7d1;}.text-brand2Lightest{color:#dceddb;}.bg-brand2Lightest{background-color:#dceddb;}.text-brand3{color:#FFED95;}.bg-brand3{background-color:#FFED95;}.text-brand3Dark{color:#ffea86;}.bg-brand3Dark{background-color:#ffea86;}.text-brand3Darker{color:#ffe876;}.bg-brand3Darker{background-color:#ffe876;}.text-brand3Darkest{color:#ffe567;}.bg-brand3Darkest{background-color:#ffe567;}.text-brand3Light{color:#fff0a4;}.bg-brand3Light{background-color:#fff0a4;}.text-brand3Lighter{color:#fff2b4;}.bg-brand3Lighter{background-color:#fff2b4;}.text-brand3Lightest{color:#fff5c3;}.bg-brand3Lightest{background-color:#fff5c3;}.text-brand4{color:#439374;}.bg-brand4{background-color:#439374;}.text-brand4Dark{color:#3e886c;}.bg-brand4Dark{background-color:#3e886c;}.text-brand4Darker{color:#397e63;}.bg-brand4Darker{background-color:#397e63;}.text-brand4Darkest{color:#35735b;}.bg-brand4Darkest{background-color:#35735b;}.text-brand4Light{color:#489e7c;}.bg-brand4Light{background-color:#489e7c;}.text-brand4Lighter{color:#4da885;}.bg-brand4Lighter{background-color:#4da885;}.text-brand4Lightest{color:#53b18c;}.bg-brand4Lightest{background-color:#53b18c;}.text-destination{color:#00AF98;}.bg-destination{background-color:#00AF98;}.text-destinationDark{color:#00a08b;}.bg-destinationDark{background-color:#00a08b;}.text-destinationDarker{color:#00907d;}.bg-destinationDarker{background-color:#00907d;}.text-destinationDarkest{color:#008170;}.bg-destinationDarkest{background-color:#008170;}.text-destinationLight{color:#00bea5;}.bg-destinationLight{background-color:#00bea5;}.text-destinationLighter{color:#00ceb3;}.bg-destinationLighter{background-color:#00ceb3;}.text-destinationLightest{color:#00ddc0;}.bg-destinationLightest{background-color:#00ddc0;}.text-arbor{color:#8DC640;}.bg-arbor{background-color:#8DC640;}.text-arborDark{color:#85be39;}.bg-arborDark{background-color:#85be39;}.text-arborDarker{color:#7db235;}.bg-arborDarker{background-color:#7db235;}.text-arborDarkest{color:#75a632;}.bg-arborDarkest{background-color:#75a632;}.text-arborLight{color:#94ca4c;}.bg-arborLight{background-color:#94ca4c;}.text-arborLighter{color:#9bcd58;}.bg-arborLighter{background-color:#9bcd58;}.text-arborLightest{color:#a2d163;}.bg-arborLightest{background-color:#a2d163;}.text-black{color:#000000;}.bg-black{background-color:#000000;}.text-blackDark{color:#000000;}.bg-blackDark{background-color:#000000;}.text-blackDarker{color:#000000;}.bg-blackDarker{background-color:#000000;}.text-blackDarkest{color:#000000;}.bg-blackDarkest{background-color:#000000;}.text-blackLight{color:#080808;}.bg-blackLight{background-color:#080808;}.text-blackLighter{color:#0f0f0f;}.bg-blackLighter{background-color:#0f0f0f;}.text-blackLightest{color:#171717;}.bg-blackLightest{background-color:#171717;}.text-neutral{color:#F4F4F4;}.bg-neutral{background-color:#F4F4F4;}.text-neutralDark{color:#ececec;}.bg-neutralDark{background-color:#ececec;}.text-neutralDarker{color:#e5e5e5;}.bg-neutralDarker{background-color:#e5e5e5;}.text-neutralDarkest{color:#dddddd;}.bg-neutralDarkest{background-color:#dddddd;}.text-neutralLight{color:#fcfcfc;}.bg-neutralLight{background-color:#fcfcfc;}.text-neutralLighter{color:#ffffff;}.bg-neutralLighter{background-color:#ffffff;}.text-neutralLightest{color:#ffffff;}.bg-neutralLightest{background-color:#ffffff;}.text-white{color:#FFFFFF;}.bg-white{background-color:#FFFFFF;}.text-whiteDark{color:#f7f7f7;}.bg-whiteDark{background-color:#f7f7f7;}.text-whiteDarker{color:#f0f0f0;}.bg-whiteDarker{background-color:#f0f0f0;}.text-whiteDarkest{color:#e8e8e8;}.bg-whiteDarkest{background-color:#e8e8e8;}.text-whiteLight{color:#ffffff;}.bg-whiteLight{background-color:#ffffff;}.text-whiteLighter{color:#ffffff;}.bg-whiteLighter{background-color:#ffffff;}.text-whiteLightest{color:#ffffff;}.bg-whiteLightest{background-color:#ffffff;}.text-body{color:#373736;}.bg-body{background-color:#373736;}.text-bodyDark{color:#2f2f2e;}.bg-bodyDark{background-color:#2f2f2e;}.text-bodyDarker{color:#282827;}.bg-bodyDarker{background-color:#282827;}.text-bodyDarkest{color:#20201f;}.bg-bodyDarkest{background-color:#20201f;}.text-bodyLight{color:#3f3f3e;}.bg-bodyLight{background-color:#3f3f3e;}.text-bodyLighter{color:#464645;}.bg-bodyLighter{background-color:#464645;}.text-bodyLightest{color:#4e4e4d;}.bg-bodyLightest{background-color:#4e4e4d;}.text-border{color:#E9E9E9;}.bg-border{background-color:#E9E9E9;}.text-borderDark{color:#e1e1e1;}.bg-borderDark{background-color:#e1e1e1;}.text-borderDarker{color:#dadada;}.bg-borderDarker{background-color:#dadada;}.text-borderDarkest{color:#d2d2d2;}.bg-borderDarkest{background-color:#d2d2d2;}.text-borderLight{color:#f1f1f1;}.bg-borderLight{background-color:#f1f1f1;}.text-borderLighter{color:#f8f8f8;}.bg-borderLighter{background-color:#f8f8f8;}.text-borderLightest{color:#ffffff;}.bg-borderLightest{background-color:#ffffff;}.text-error{color:red;}.bg-error{background-color:red;}.text-errorDark{color:#f00000;}.bg-errorDark{background-color:#f00000;}.text-errorDarker{color:#e00000;}.bg-errorDarker{background-color:#e00000;}.text-errorDarkest{color:#d10000;}.bg-errorDarkest{background-color:#d10000;}.text-errorLight{color:#ff0f0f;}.bg-errorLight{background-color:#ff0f0f;}.text-errorLighter{color:#ff1f1f;}.bg-errorLighter{background-color:#ff1f1f;}.text-errorLightest{color:#ff2e2e;}.bg-errorLightest{background-color:#ff2e2e;}.text-brand1TextLarge{color:#000000;}.bg-brand1TextLarge{background-color:#000000;}.text-brand1TextSmall{color:#000000;}.bg-brand1TextSmall{background-color:#000000;}.text-brand1Text{color:#000000;}.bg-brand1Text{background-color:#000000;}.text-brand1DarkTextLarge{color:#000000;}.bg-brand1DarkTextLarge{background-color:#000000;}.text-brand1DarkTextSmall{color:#000000;}.bg-brand1DarkTextSmall{background-color:#000000;}.text-brand1DarkText{color:#000000;}.bg-brand1DarkText{background-color:#000000;}.text-brand1DarkerTextLarge{color:#000000;}.bg-brand1DarkerTextLarge{background-color:#000000;}.text-brand1DarkerTextSmall{color:#000000;}.bg-brand1DarkerTextSmall{background-color:#000000;}.text-brand1DarkerText{color:#000000;}.bg-brand1DarkerText{background-color:#000000;}.text-brand1DarkestTextLarge{color:#000000;}.bg-brand1DarkestTextLarge{background-color:#000000;}.text-brand1DarkestTextSmall{color:#000000;}.bg-brand1DarkestTextSmall{background-color:#000000;}.text-brand1DarkestText{color:#000000;}.bg-brand1DarkestText{background-color:#000000;}.text-brand1LightTextLarge{color:#000000;}.bg-brand1LightTextLarge{background-color:#000000;}.text-brand1LightTextSmall{color:#000000;}.bg-brand1LightTextSmall{background-color:#000000;}.text-brand1LightText{color:#000000;}.bg-brand1LightText{background-color:#000000;}.text-brand1LighterTextLarge{color:#000000;}.bg-brand1LighterTextLarge{background-color:#000000;}.text-brand1LighterTextSmall{color:#000000;}.bg-brand1LighterTextSmall{background-color:#000000;}.text-brand1LighterText{color:#000000;}.bg-brand1LighterText{background-color:#000000;}.text-brand1LightestTextLarge{color:#000000;}.bg-brand1LightestTextLarge{background-color:#000000;}.text-brand1LightestTextSmall{color:#000000;}.bg-brand1LightestTextSmall{background-color:#000000;}.text-brand1LightestText{color:#000000;}.bg-brand1LightestText{background-color:#000000;}.text-brand2TextLarge{color:#000000;}.bg-brand2TextLarge{background-color:#000000;}.text-brand2TextSmall{color:#000000;}.bg-brand2TextSmall{background-color:#000000;}.text-brand2Text{color:#000000;}.bg-brand2Text{background-color:#000000;}.text-brand2DarkTextLarge{color:#000000;}.bg-brand2DarkTextLarge{background-color:#000000;}.text-brand2DarkTextSmall{color:#000000;}.bg-brand2DarkTextSmall{background-color:#000000;}.text-brand2DarkText{color:#000000;}.bg-brand2DarkText{background-color:#000000;}.text-brand2DarkerTextLarge{color:#000000;}.bg-brand2DarkerTextLarge{background-color:#000000;}.text-brand2DarkerTextSmall{color:#000000;}.bg-brand2DarkerTextSmall{background-color:#000000;}.text-brand2DarkerText{color:#000000;}.bg-brand2DarkerText{background-color:#000000;}.text-brand2DarkestTextLarge{color:#000000;}.bg-brand2DarkestTextLarge{background-color:#000000;}.text-brand2DarkestTextSmall{color:#000000;}.bg-brand2DarkestTextSmall{background-color:#000000;}.text-brand2DarkestText{color:#000000;}.bg-brand2DarkestText{background-color:#000000;}.text-brand2LightTextLarge{color:#000000;}.bg-brand2LightTextLarge{background-color:#000000;}.text-brand2LightTextSmall{color:#000000;}.bg-brand2LightTextSmall{background-color:#000000;}.text-brand2LightText{color:#000000;}.bg-brand2LightText{background-color:#000000;}.text-brand2LighterTextLarge{color:#000000;}.bg-brand2LighterTextLarge{background-color:#000000;}.text-brand2LighterTextSmall{color:#000000;}.bg-brand2LighterTextSmall{background-color:#000000;}.text-brand2LighterText{color:#000000;}.bg-brand2LighterText{background-color:#000000;}.text-brand2LightestTextLarge{color:#000000;}.bg-brand2LightestTextLarge{background-color:#000000;}.text-brand2LightestTextSmall{color:#000000;}.bg-brand2LightestTextSmall{background-color:#000000;}.text-brand2LightestText{color:#000000;}.bg-brand2LightestText{background-color:#000000;}.text-brand3TextLarge{color:#000000;}.bg-brand3TextLarge{background-color:#000000;}.text-brand3TextSmall{color:#000000;}.bg-brand3TextSmall{background-color:#000000;}.text-brand3Text{color:#000000;}.bg-brand3Text{background-color:#000000;}.text-brand3DarkTextLarge{color:#000000;}.bg-brand3DarkTextLarge{background-color:#000000;}.text-brand3DarkTextSmall{color:#000000;}.bg-brand3DarkTextSmall{background-color:#000000;}.text-brand3DarkText{color:#000000;}.bg-brand3DarkText{background-color:#000000;}.text-brand3DarkerTextLarge{color:#000000;}.bg-brand3DarkerTextLarge{background-color:#000000;}.text-brand3DarkerTextSmall{color:#000000;}.bg-brand3DarkerTextSmall{background-color:#000000;}.text-brand3DarkerText{color:#000000;}.bg-brand3DarkerText{background-color:#000000;}.text-brand3DarkestTextLarge{color:#000000;}.bg-brand3DarkestTextLarge{background-color:#000000;}.text-brand3DarkestTextSmall{color:#000000;}.bg-brand3DarkestTextSmall{background-color:#000000;}.text-brand3DarkestText{color:#000000;}.bg-brand3DarkestText{background-color:#000000;}.text-brand3LightTextLarge{color:#000000;}.bg-brand3LightTextLarge{background-color:#000000;}.text-brand3LightTextSmall{color:#000000;}.bg-brand3LightTextSmall{background-color:#000000;}.text-brand3LightText{color:#000000;}.bg-brand3LightText{background-color:#000000;}.text-brand3LighterTextLarge{color:#000000;}.bg-brand3LighterTextLarge{background-color:#000000;}.text-brand3LighterTextSmall{color:#000000;}.bg-brand3LighterTextSmall{background-color:#000000;}.text-brand3LighterText{color:#000000;}.bg-brand3LighterText{background-color:#000000;}.text-brand3LightestTextLarge{color:#000000;}.bg-brand3LightestTextLarge{background-color:#000000;}.text-brand3LightestTextSmall{color:#000000;}.bg-brand3LightestTextSmall{background-color:#000000;}.text-brand3LightestText{color:#000000;}.bg-brand3LightestText{background-color:#000000;}.text-brand4TextLarge{color:#FFFFFF;}.bg-brand4TextLarge{background-color:#FFFFFF;}.text-brand4TextSmall{color:#000000;}.bg-brand4TextSmall{background-color:#000000;}.text-brand4Text{color:#000000;}.bg-brand4Text{background-color:#000000;}.text-brand4DarkTextLarge{color:#FFFFFF;}.bg-brand4DarkTextLarge{background-color:#FFFFFF;}.text-brand4DarkTextSmall{color:#000000;}.bg-brand4DarkTextSmall{background-color:#000000;}.text-brand4DarkText{color:#000000;}.bg-brand4DarkText{background-color:#000000;}.text-brand4DarkerTextLarge{color:#FFFFFF;}.bg-brand4DarkerTextLarge{background-color:#FFFFFF;}.text-brand4DarkerTextSmall{color:#FFFFFF;}.bg-brand4DarkerTextSmall{background-color:#FFFFFF;}.text-brand4DarkerText{color:#FFFFFF;}.bg-brand4DarkerText{background-color:#FFFFFF;}.text-brand4DarkestTextLarge{color:#FFFFFF;}.bg-brand4DarkestTextLarge{background-color:#FFFFFF;}.text-brand4DarkestTextSmall{color:#FFFFFF;}.bg-brand4DarkestTextSmall{background-color:#FFFFFF;}.text-brand4DarkestText{color:#FFFFFF;}.bg-brand4DarkestText{background-color:#FFFFFF;}.text-brand4LightTextLarge{color:#FFFFFF;}.bg-brand4LightTextLarge{background-color:#FFFFFF;}.text-brand4LightTextSmall{color:#000000;}.bg-brand4LightTextSmall{background-color:#000000;}.text-brand4LightText{color:#000000;}.bg-brand4LightText{background-color:#000000;}.text-brand4LighterTextLarge{color:#000000;}.bg-brand4LighterTextLarge{background-color:#000000;}.text-brand4LighterTextSmall{color:#000000;}.bg-brand4LighterTextSmall{background-color:#000000;}.text-brand4LighterText{color:#000000;}.bg-brand4LighterText{background-color:#000000;}.text-brand4LightestTextLarge{color:#000000;}.bg-brand4LightestTextLarge{background-color:#000000;}.text-brand4LightestTextSmall{color:#000000;}.bg-brand4LightestTextSmall{background-color:#000000;}.text-brand4LightestText{color:#000000;}.bg-brand4LightestText{background-color:#000000;}.text-destinationTextLarge{color:#000000;}.bg-destinationTextLarge{background-color:#000000;}.text-destinationTextSmall{color:#000000;}.bg-destinationTextSmall{background-color:#000000;}.text-destinationText{color:#000000;}.bg-destinationText{background-color:#000000;}.text-destinationDarkTextLarge{color:#FFFFFF;}.bg-destinationDarkTextLarge{background-color:#FFFFFF;}.text-destinationDarkTextSmall{color:#000000;}.bg-destinationDarkTextSmall{background-color:#000000;}.text-destinationDarkText{color:#000000;}.bg-destinationDarkText{background-color:#000000;}.text-destinationDarkerTextLarge{color:#FFFFFF;}.bg-destinationDarkerTextLarge{background-color:#FFFFFF;}.text-destinationDarkerTextSmall{color:#000000;}.bg-destinationDarkerTextSmall{background-color:#000000;}.text-destinationDarkerText{color:#000000;}.bg-destinationDarkerText{background-color:#000000;}.text-destinationDarkestTextLarge{color:#FFFFFF;}.bg-destinationDarkestTextLarge{background-color:#FFFFFF;}.text-destinationDarkestTextSmall{color:#FFFFFF;}.bg-destinationDarkestTextSmall{background-color:#FFFFFF;}.text-destinationDarkestText{color:#FFFFFF;}.bg-destinationDarkestText{background-color:#FFFFFF;}.text-destinationLightTextLarge{color:#000000;}.bg-destinationLightTextLarge{background-color:#000000;}.text-destinationLightTextSmall{color:#000000;}.bg-destinationLightTextSmall{background-color:#000000;}.text-destinationLightText{color:#000000;}.bg-destinationLightText{background-color:#000000;}.text-destinationLighterTextLarge{color:#000000;}.bg-destinationLighterTextLarge{background-color:#000000;}.text-destinationLighterTextSmall{color:#000000;}.bg-destinationLighterTextSmall{background-color:#000000;}.text-destinationLighterText{color:#000000;}.bg-destinationLighterText{background-color:#000000;}.text-destinationLightestTextLarge{color:#000000;}.bg-destinationLightestTextLarge{background-color:#000000;}.text-destinationLightestTextSmall{color:#000000;}.bg-destinationLightestTextSmall{background-color:#000000;}.text-destinationLightestText{color:#000000;}.bg-destinationLightestText{background-color:#000000;}.text-arborTextLarge{color:#000000;}.bg-arborTextLarge{background-color:#000000;}.text-arborTextSmall{color:#000000;}.bg-arborTextSmall{background-color:#000000;}.text-arborText{color:#000000;}.bg-arborText{background-color:#000000;}.text-arborDarkTextLarge{color:#000000;}.bg-arborDarkTextLarge{background-color:#000000;}.text-arborDarkTextSmall{color:#000000;}.bg-arborDarkTextSmall{background-color:#000000;}.text-arborDarkText{color:#000000;}.bg-arborDarkText{background-color:#000000;}.text-arborDarkerTextLarge{color:#000000;}.bg-arborDarkerTextLarge{background-color:#000000;}.text-arborDarkerTextSmall{color:#000000;}.bg-arborDarkerTextSmall{background-color:#000000;}.text-arborDarkerText{color:#000000;}.bg-arborDarkerText{background-color:#000000;}.text-arborDarkestTextLarge{color:#000000;}.bg-arborDarkestTextLarge{background-color:#000000;}.text-arborDarkestTextSmall{color:#000000;}.bg-arborDarkestTextSmall{background-color:#000000;}.text-arborDarkestText{color:#000000;}.bg-arborDarkestText{background-color:#000000;}.text-arborLightTextLarge{color:#000000;}.bg-arborLightTextLarge{background-color:#000000;}.text-arborLightTextSmall{color:#000000;}.bg-arborLightTextSmall{background-color:#000000;}.text-arborLightText{color:#000000;}.bg-arborLightText{background-color:#000000;}.text-arborLighterTextLarge{color:#000000;}.bg-arborLighterTextLarge{background-color:#000000;}.text-arborLighterTextSmall{color:#000000;}.bg-arborLighterTextSmall{background-color:#000000;}.text-arborLighterText{color:#000000;}.bg-arborLighterText{background-color:#000000;}.text-arborLightestTextLarge{color:#000000;}.bg-arborLightestTextLarge{background-color:#000000;}.text-arborLightestTextSmall{color:#000000;}.bg-arborLightestTextSmall{background-color:#000000;}.text-arborLightestText{color:#000000;}.bg-arborLightestText{background-color:#000000;}.text-blackTextLarge{color:#FFFFFF;}.bg-blackTextLarge{background-color:#FFFFFF;}.text-blackTextSmall{color:#FFFFFF;}.bg-blackTextSmall{background-color:#FFFFFF;}.text-blackText{color:#FFFFFF;}.bg-blackText{background-color:#FFFFFF;}.text-blackDarkTextLarge{color:#FFFFFF;}.bg-blackDarkTextLarge{background-color:#FFFFFF;}.text-blackDarkTextSmall{color:#FFFFFF;}.bg-blackDarkTextSmall{background-color:#FFFFFF;}.text-blackDarkText{color:#FFFFFF;}.bg-blackDarkText{background-color:#FFFFFF;}.text-blackDarkerTextLarge{color:#FFFFFF;}.bg-blackDarkerTextLarge{background-color:#FFFFFF;}.text-blackDarkerTextSmall{color:#FFFFFF;}.bg-blackDarkerTextSmall{background-color:#FFFFFF;}.text-blackDarkerText{color:#FFFFFF;}.bg-blackDarkerText{background-color:#FFFFFF;}.text-blackDarkestTextLarge{color:#FFFFFF;}.bg-blackDarkestTextLarge{background-color:#FFFFFF;}.text-blackDarkestTextSmall{color:#FFFFFF;}.bg-blackDarkestTextSmall{background-color:#FFFFFF;}.text-blackDarkestText{color:#FFFFFF;}.bg-blackDarkestText{background-color:#FFFFFF;}.text-blackLightTextLarge{color:#FFFFFF;}.bg-blackLightTextLarge{background-color:#FFFFFF;}.text-blackLightTextSmall{color:#FFFFFF;}.bg-blackLightTextSmall{background-color:#FFFFFF;}.text-blackLightText{color:#FFFFFF;}.bg-blackLightText{background-color:#FFFFFF;}.text-blackLighterTextLarge{color:#FFFFFF;}.bg-blackLighterTextLarge{background-color:#FFFFFF;}.text-blackLighterTextSmall{color:#FFFFFF;}.bg-blackLighterTextSmall{background-color:#FFFFFF;}.text-blackLighterText{color:#FFFFFF;}.bg-blackLighterText{background-color:#FFFFFF;}.text-blackLightestTextLarge{color:#FFFFFF;}.bg-blackLightestTextLarge{background-color:#FFFFFF;}.text-blackLightestTextSmall{color:#FFFFFF;}.bg-blackLightestTextSmall{background-color:#FFFFFF;}.text-blackLightestText{color:#FFFFFF;}.bg-blackLightestText{background-color:#FFFFFF;}.text-neutralTextLarge{color:#000000;}.bg-neutralTextLarge{background-color:#000000;}.text-neutralTextSmall{color:#000000;}.bg-neutralTextSmall{background-color:#000000;}.text-neutralText{color:#000000;}.bg-neutralText{background-color:#000000;}.text-neutralDarkTextLarge{color:#000000;}.bg-neutralDarkTextLarge{background-color:#000000;}.text-neutralDarkTextSmall{color:#000000;}.bg-neutralDarkTextSmall{background-color:#000000;}.text-neutralDarkText{color:#000000;}.bg-neutralDarkText{background-color:#000000;}.text-neutralDarkerTextLarge{color:#000000;}.bg-neutralDarkerTextLarge{background-color:#000000;}.text-neutralDarkerTextSmall{color:#000000;}.bg-neutralDarkerTextSmall{background-color:#000000;}.text-neutralDarkerText{color:#000000;}.bg-neutralDarkerText{background-color:#000000;}.text-neutralDarkestTextLarge{color:#000000;}.bg-neutralDarkestTextLarge{background-color:#000000;}.text-neutralDarkestTextSmall{color:#000000;}.bg-neutralDarkestTextSmall{background-color:#000000;}.text-neutralDarkestText{color:#000000;}.bg-neutralDarkestText{background-color:#000000;}.text-neutralLightTextLarge{color:#000000;}.bg-neutralLightTextLarge{background-color:#000000;}.text-neutralLightTextSmall{color:#000000;}.bg-neutralLightTextSmall{background-color:#000000;}.text-neutralLightText{color:#000000;}.bg-neutralLightText{background-color:#000000;}.text-neutralLighterTextLarge{color:#000000;}.bg-neutralLighterTextLarge{background-color:#000000;}.text-neutralLighterTextSmall{color:#000000;}.bg-neutralLighterTextSmall{background-color:#000000;}.text-neutralLighterText{color:#000000;}.bg-neutralLighterText{background-color:#000000;}.text-neutralLightestTextLarge{color:#000000;}.bg-neutralLightestTextLarge{background-color:#000000;}.text-neutralLightestTextSmall{color:#000000;}.bg-neutralLightestTextSmall{background-color:#000000;}.text-neutralLightestText{color:#000000;}.bg-neutralLightestText{background-color:#000000;}.text-whiteTextLarge{color:#000000;}.bg-whiteTextLarge{background-color:#000000;}.text-whiteTextSmall{color:#000000;}.bg-whiteTextSmall{background-color:#000000;}.text-whiteText{color:#000000;}.bg-whiteText{background-color:#000000;}.text-whiteDarkTextLarge{color:#000000;}.bg-whiteDarkTextLarge{background-color:#000000;}.text-whiteDarkTextSmall{color:#000000;}.bg-whiteDarkTextSmall{background-color:#000000;}.text-whiteDarkText{color:#000000;}.bg-whiteDarkText{background-color:#000000;}.text-whiteDarkerTextLarge{color:#000000;}.bg-whiteDarkerTextLarge{background-color:#000000;}.text-whiteDarkerTextSmall{color:#000000;}.bg-whiteDarkerTextSmall{background-color:#000000;}.text-whiteDarkerText{color:#000000;}.bg-whiteDarkerText{background-color:#000000;}.text-whiteDarkestTextLarge{color:#000000;}.bg-whiteDarkestTextLarge{background-color:#000000;}.text-whiteDarkestTextSmall{color:#000000;}.bg-whiteDarkestTextSmall{background-color:#000000;}.text-whiteDarkestText{color:#000000;}.bg-whiteDarkestText{background-color:#000000;}.text-whiteLightTextLarge{color:#000000;}.bg-whiteLightTextLarge{background-color:#000000;}.text-whiteLightTextSmall{color:#000000;}.bg-whiteLightTextSmall{background-color:#000000;}.text-whiteLightText{color:#000000;}.bg-whiteLightText{background-color:#000000;}.text-whiteLighterTextLarge{color:#000000;}.bg-whiteLighterTextLarge{background-color:#000000;}.text-whiteLighterTextSmall{color:#000000;}.bg-whiteLighterTextSmall{background-color:#000000;}.text-whiteLighterText{color:#000000;}.bg-whiteLighterText{background-color:#000000;}.text-whiteLightestTextLarge{color:#000000;}.bg-whiteLightestTextLarge{background-color:#000000;}.text-whiteLightestTextSmall{color:#000000;}.bg-whiteLightestTextSmall{background-color:#000000;}.text-whiteLightestText{color:#000000;}.bg-whiteLightestText{background-color:#000000;}.text-bodyTextLarge{color:#FFFFFF;}.bg-bodyTextLarge{background-color:#FFFFFF;}.text-bodyTextSmall{color:#FFFFFF;}.bg-bodyTextSmall{background-color:#FFFFFF;}.text-bodyText{color:#FFFFFF;}.bg-bodyText{background-color:#FFFFFF;}.text-bodyDarkTextLarge{color:#FFFFFF;}.bg-bodyDarkTextLarge{background-color:#FFFFFF;}.text-bodyDarkTextSmall{color:#FFFFFF;}.bg-bodyDarkTextSmall{background-color:#FFFFFF;}.text-bodyDarkText{color:#FFFFFF;}.bg-bodyDarkText{background-color:#FFFFFF;}.text-bodyDarkerTextLarge{color:#FFFFFF;}.bg-bodyDarkerTextLarge{background-color:#FFFFFF;}.text-bodyDarkerTextSmall{color:#FFFFFF;}.bg-bodyDarkerTextSmall{background-color:#FFFFFF;}.text-bodyDarkerText{color:#FFFFFF;}.bg-bodyDarkerText{background-color:#FFFFFF;}.text-bodyDarkestTextLarge{color:#FFFFFF;}.bg-bodyDarkestTextLarge{background-color:#FFFFFF;}.text-bodyDarkestTextSmall{color:#FFFFFF;}.bg-bodyDarkestTextSmall{background-color:#FFFFFF;}.text-bodyDarkestText{color:#FFFFFF;}.bg-bodyDarkestText{background-color:#FFFFFF;}.text-bodyLightTextLarge{color:#FFFFFF;}.bg-bodyLightTextLarge{background-color:#FFFFFF;}.text-bodyLightTextSmall{color:#FFFFFF;}.bg-bodyLightTextSmall{background-color:#FFFFFF;}.text-bodyLightText{color:#FFFFFF;}.bg-bodyLightText{background-color:#FFFFFF;}.text-bodyLighterTextLarge{color:#FFFFFF;}.bg-bodyLighterTextLarge{background-color:#FFFFFF;}.text-bodyLighterTextSmall{color:#FFFFFF;}.bg-bodyLighterTextSmall{background-color:#FFFFFF;}.text-bodyLighterText{color:#FFFFFF;}.bg-bodyLighterText{background-color:#FFFFFF;}.text-bodyLightestTextLarge{color:#FFFFFF;}.bg-bodyLightestTextLarge{background-color:#FFFFFF;}.text-bodyLightestTextSmall{color:#FFFFFF;}.bg-bodyLightestTextSmall{background-color:#FFFFFF;}.text-bodyLightestText{color:#FFFFFF;}.bg-bodyLightestText{background-color:#FFFFFF;}.text-borderTextLarge{color:#000000;}.bg-borderTextLarge{background-color:#000000;}.text-borderTextSmall{color:#000000;}.bg-borderTextSmall{background-color:#000000;}.text-borderText{color:#000000;}.bg-borderText{background-color:#000000;}.text-borderDarkTextLarge{color:#000000;}.bg-borderDarkTextLarge{background-color:#000000;}.text-borderDarkTextSmall{color:#000000;}.bg-borderDarkTextSmall{background-color:#000000;}.text-borderDarkText{color:#000000;}.bg-borderDarkText{background-color:#000000;}.text-borderDarkerTextLarge{color:#000000;}.bg-borderDarkerTextLarge{background-color:#000000;}.text-borderDarkerTextSmall{color:#000000;}.bg-borderDarkerTextSmall{background-color:#000000;}.text-borderDarkerText{color:#000000;}.bg-borderDarkerText{background-color:#000000;}.text-borderDarkestTextLarge{color:#000000;}.bg-borderDarkestTextLarge{background-color:#000000;}.text-borderDarkestTextSmall{color:#000000;}.bg-borderDarkestTextSmall{background-color:#000000;}.text-borderDarkestText{color:#000000;}.bg-borderDarkestText{background-color:#000000;}.text-borderLightTextLarge{color:#000000;}.bg-borderLightTextLarge{background-color:#000000;}.text-borderLightTextSmall{color:#000000;}.bg-borderLightTextSmall{background-color:#000000;}.text-borderLightText{color:#000000;}.bg-borderLightText{background-color:#000000;}.text-borderLighterTextLarge{color:#000000;}.bg-borderLighterTextLarge{background-color:#000000;}.text-borderLighterTextSmall{color:#000000;}.bg-borderLighterTextSmall{background-color:#000000;}.text-borderLighterText{color:#000000;}.bg-borderLighterText{background-color:#000000;}.text-borderLightestTextLarge{color:#000000;}.bg-borderLightestTextLarge{background-color:#000000;}.text-borderLightestTextSmall{color:#000000;}.bg-borderLightestTextSmall{background-color:#000000;}.text-borderLightestText{color:#000000;}.bg-borderLightestText{background-color:#000000;}.text-errorTextLarge{color:#FFFFFF;}.bg-errorTextLarge{background-color:#FFFFFF;}.text-errorTextSmall{color:#000000;}.bg-errorTextSmall{background-color:#000000;}.text-errorText{color:#000000;}.bg-errorText{background-color:#000000;}.text-errorDarkTextLarge{color:#FFFFFF;}.bg-errorDarkTextLarge{background-color:#FFFFFF;}.text-errorDarkTextSmall{color:#000000;}.bg-errorDarkTextSmall{background-color:#000000;}.text-errorDarkText{color:#000000;}.bg-errorDarkText{background-color:#000000;}.text-errorDarkerTextLarge{color:#FFFFFF;}.bg-errorDarkerTextLarge{background-color:#FFFFFF;}.text-errorDarkerTextSmall{color:#FFFFFF;}.bg-errorDarkerTextSmall{background-color:#FFFFFF;}.text-errorDarkerText{color:#FFFFFF;}.bg-errorDarkerText{background-color:#FFFFFF;}.text-errorDarkestTextLarge{color:#FFFFFF;}.bg-errorDarkestTextLarge{background-color:#FFFFFF;}.text-errorDarkestTextSmall{color:#FFFFFF;}.bg-errorDarkestTextSmall{background-color:#FFFFFF;}.text-errorDarkestText{color:#FFFFFF;}.bg-errorDarkestText{background-color:#FFFFFF;}.text-errorLightTextLarge{color:#FFFFFF;}.bg-errorLightTextLarge{background-color:#FFFFFF;}.text-errorLightTextSmall{color:#000000;}.bg-errorLightTextSmall{background-color:#000000;}.text-errorLightText{color:#000000;}.bg-errorLightText{background-color:#000000;}.text-errorLighterTextLarge{color:#FFFFFF;}.bg-errorLighterTextLarge{background-color:#FFFFFF;}.text-errorLighterTextSmall{color:#000000;}.bg-errorLighterTextSmall{background-color:#000000;}.text-errorLighterText{color:#000000;}.bg-errorLighterText{background-color:#000000;}.text-errorLightestTextLarge{color:#FFFFFF;}.bg-errorLightestTextLarge{background-color:#FFFFFF;}.text-errorLightestTextSmall{color:#000000;}.bg-errorLightestTextSmall{background-color:#000000;}.text-errorLightestText{color:#000000;}.bg-errorLightestText{background-color:#000000;}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:ingra-2,sans-serif;color:#373736;}.text-sans-serif{font-family:ingra-2,sans-serif;}.text-serif{font-family:Rubik,serif;}.text-display{font-family:ingra-condensed,serif;}.text-condensed{font-family:ingra-condensed,serif;}a{color:#79C4B1;}a:hover{-webkit-text-decoration:none;text-decoration:none;color:#84c9b7;}p{font-size:18px;line-height:1.8;font-family:ingra-2,sans-serif;font-weight:300;margin:0 0 32px 0;}@media (min-width:992px){p{font-size:20px;margin:0 0 42px 0;}}b,strong{font-weight:bold;font-weight:700;}.error{color:red;}@media (min-width:1600px){.container{max-width:1400px;}}@media (min-width:1800px){.container{max-width:1600px;}}.container-sm{max-width:1000px;}.btn{background-color:#373736;font-family:ingra-condensed,serif;color:#ffe567;font-weight:800;line-height:1;-webkit-letter-spacing:.5px;-moz-letter-spacing:.5px;-ms-letter-spacing:.5px;letter-spacing:.5px;text-transform:uppercase;border-radius:0;border:1px solid #373736;padding:25px 50px;background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;text-align:center;-webkit-transition:all .3s ease;transition:all .3s ease;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;font-size:16px;}@media (min-width:992px){.btn{font-size:18px;padding:20px 30px;}}.btn:hover{color:#FFFFFF;background-color:#454545;border:1px solid #454545;}.btn-small{background-color:#79C4B1;color:#FFFFFF;font-size:14px;font-weight:700;line-height:1;text-transform:uppercase;-webkit-letter-spacing:2px;-moz-letter-spacing:2px;-ms-letter-spacing:2px;letter-spacing:2px;border-radius:0;border:2px solid #79C4B1;padding:10px 15px;background-image:linear-gradient(45deg,rgba(0,0,0,0.2) 0%,rgba(0,0,0,0) 80%);background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;text-align:center;-webkit-transition:all .3s ease;transition:all .3s ease;}.btn-small:hover{color:#FFFFFF;background-color:#59b69e;border:2px solid #59b69e;}.btn-block-mobile{width:100%;display:block;}@media (min-width:992px){.btn-block-mobile{width:auto;display:inline-block;}}.btn-brand1{background-color:#79C4B1;border:2px solid #79C4B1;color:#FFFFFF;}.btn-brand1:hover{background-color:#59b69e;border:1px solid #59b69e;}.btn-brand2{background-color:#BFDDBD;border:2px solid #BFDDBD;color:#FFFFFF;}.btn-brand2:hover{background-color:#a2cd9f;border:2px solid #a2cd9f;}.btn-brand3{background-color:#FFED95;border:2px solid #FFED95;color:#373736;}.btn-brand3:hover{color:#373736;background-color:#ffe567;border:2px solid #ffe567;}.btn-brand4{background-color:#439374;border:2px solid #439374;color:#000000;}.btn-brand4:hover{background-color:#35735b;border:2px solid #35735b;}.btn-body{background-color:#373736;border:2px solid #373736;color:#FFED95;}.btn-body:hover{background-color:#20201f;border:2px solid #20201f;}.btn-destination{background-color:#00AF98;border:2px solid #00AF98;color:#FFFFFF;}.btn-destination:hover{background-color:#008170;border:2px solid #008170;}.btn-hollow{background-color:transparent;color:#79C4B1;border:2px solid #79C4B1;background-image:none;}.btn-hollow:hover{background-color:#79C4B1;border:1px solid #FFFFFF;}.btn-hollow-white{background-color:transparent;color:#f7f7f7;border:2px solid #f7f7f7;background-image:none;}.btn-hollow-white:hover{background-color:#BFDDBD;border:2px solid #f7f7f7;}.btn-hollow-alt{background-color:transparent;color:#f7f7f7;border:2px solid #79C4B1;background-image:none;}.btn-hollow-alt:hover{background-color:#79C4B1;border:2px solid #79C4B1;}.btn-hollow-alt2{background-color:transparent;color:#f7f7f7;border:2px solid #FFED95;background-image:none;}.btn-hollow-alt2:hover{background-color:#FFED95;border:2px solid #FFED95;color:#373736;}.btn-hollow-brand1{background-color:transparent;color:#79C4B1;border:2px solid #79C4B1;background-image:none;}.btn-hollow-brand1:hover{background-color:#79C4B1;border:2px solid #79C4B1;color:#FFFFFF;}.btn-hollow-brand2{background-color:transparent;color:#BFDDBD;border:2px solid #BFDDBD;background-image:none;}.btn-hollow-brand2:hover{background-color:#BFDDBD;border:2px solid #BFDDBD;color:#FFFFFF;}.btn-hollow-brand3{background-color:transparent;color:#FFED95;border:2px solid #FFED95;background-image:none;}.btn-hollow-brand3:hover{background-color:#FFED95;border:2px solid #FFED95;color:#FFFFFF;}.btn-hollow-brand4{background-color:transparent;color:#439374;border:2px solid #439374;background-image:none;}.btn-hollow-brand4:hover{background-color:#439374;border:2px solid #439374;color:#FFFFFF;}.btn-arrow-white::after{content:'';position:relative;width:22px;height:22px;margin:0 0 0 5px;background-image:url('/images/icon-button-arrow-right-white.svg');background-position:center center;background-repeat:no-repeat;background-size:contain;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}.btn-arrow-black{text-align:left;}.btn-arrow-black::after{content:'';position:relative;width:22px;height:22px;margin:0 0 0 5px;background-image:url('/images/icon-button-arrow-right.svg');background-position:center center;background-repeat:no-repeat;background-size:contain;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}.btn-arrow-black:hover::after{background-image:url('/images/icon-button-arrow-right-white.svg');}.btn-arrow-green{text-align:left;}.btn-arrow-green::after{content:'';position:relative;width:22px;height:22px;margin:0 0 0 5px;background-image:url('/images/icon-button-arrow-right-yellow.svg');background-position:center center;background-repeat:no-repeat;background-size:contain;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}.btn-phone-white{text-align:left;}.btn-phone-white::before{content:'';position:relative;width:22px;height:22px;margin:0 5px 0 0;background-image:url('/images/icon-phone-white.svg');background-position:center center;background-repeat:no-repeat;background-size:contain;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}.btn-phone-black{text-align:left;}.btn-phone-black::before{content:'';position:relative;width:22px;height:22px;margin:0 5px 0 0;background-image:url('/images/icon-phone.svg');background-position:center center;background-repeat:no-repeat;background-size:contain;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}.btn-phone-black:hover::after{background-image:url('/images/icon-phone-white.svg');}.btn-chat-white{text-align:left;}.btn-chat-white::before{content:'';position:absolute;position:relative;width:22px;height:22px;margin:0 5px 0 0;background-image:url('/images/icon-chat-white.svg');background-position:center center;background-repeat:no-repeat;background-size:contain;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}.btn-chat-black{text-align:left;}.btn-chat-black::before{content:'';position:relative;width:22px;height:22px;margin:0 5px 0 0;background-image:url('/images/icon-chat.svg');background-position:center center;background-repeat:no-repeat;background-size:contain;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}.btn-chat-black:hover::after{background-image:url('/images/icon-chat-white.svg');}.btn-download-white{text-align:left;}.btn-download-white::before{content:'';position:relative;width:22px;height:22px;margin:-5px 5px 0 0;background-image:url('/images/icon-download-white.svg');background-position:center center;background-repeat:no-repeat;background-size:contain;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}.btn-download-black{text-align:left;}.btn-download-black::before{content:'';position:relative;width:22px;height:22px;margin:0 5px 0 0;background-image:url('/images/icon-download.svg');background-position:center center;background-repeat:no-repeat;background-size:contain;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}.btn-download-black:hover::after{background-image:url('/images/icon-download-white.svg');}.btn-scale{-webkit-transition:all .3s ease;transition:all .3s ease;}.btn-scale:hover{-webkit-transform:scale(1.12);-ms-transform:scale(1.12);transform:scale(1.12);}.badge{background-color:#79C4B1;color:#FFFFFF;padding:4px 6px;margin:0 4px;}.tab{padding:6px 8px;color:#373736;font-weight:700;line-height:1;text-transform:uppercase;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;border-radius:8px;border:0;font-size:12px;margin:0 2px;background-color:transparent;}.tab.active{background-image:linear-gradient(45deg,rgba(0,0,0,0.2) 0%,rgba(0,0,0,0) 80%);background-position:center center;background-repeat:no-repeat;background-size:cover;background-color:#BFDDBD;color:#FFFFFF;outline-color:#FFFFFF;}.tab.active:focus{-webkit-animation:focus-fade 4s ease;animation:focus-fade 4s ease;outline-color:#FFFFFF;}@media (min-width:992px){.tab{padding:20px 30px;-webkit-letter-spacing:2px;-moz-letter-spacing:2px;-ms-letter-spacing:2px;letter-spacing:2px;font-size:16px;}}@-webkit-keyframes focus-fade{0%{outline-color:-webkit-focus-ring-color;}50%{outline-color:-webkit-focus-ring-color;}100%{outline-color:#FFFFFF;}}@keyframes focus-fade{0%{outline-color:-webkit-focus-ring-color;}50%{outline-color:-webkit-focus-ring-color;}100%{outline-color:#FFFFFF;}}.Underdog_mix{position:relative;margin:0 0 20px;padding:0 0 20px;}@media (min-width:992px){.Underdog_mix{margin:0 0 30px;padding:0 0 30px;}}.Underdog_mix::before{content:'';position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);bottom:0;width:70px;height:2px;background:#FFED95;}@media (min-width:992px){.Underdog_mix::before{width:90px;left:0;-webkit-transform:unset;-ms-transform:unset;transform:unset;}}.Underdog_mixMobile{position:relative;margin:0 0 20px;padding:0 0 20px;}@media (min-width:992px){.Underdog_mixMobile{margin:0 0 30px;padding:0 0 30px;}}.Underdog_mixMobile::before{content:'';position:absolute;left:0;bottom:0;width:70px;height:1px;background:#79C4B1;}@media (min-width:992px){.Underdog_mixMobile::before{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);width:90px;}}.Underdog_left{position:relative;margin:0 0 20px;padding:0 0 20px;}@media (min-width:992px){.Underdog_left{margin:0 0 30px;padding:0 0 30px;}}.Underdog_left::before{content:'';position:absolute;left:0;bottom:0;width:70px;height:2px;background:#FFED95;}@media (min-width:992px){.Underdog_left::before{width:90px;}}.Underdog_center{position:relative;margin:0 0 20px;padding:0 0 20px;}@media (min-width:992px){.Underdog_center{margin:0 0 30px;padding:0 0 30px;}}.Underdog_center::before{content:'';position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);bottom:0;width:70px;height:2px;background:#FFED95;}@media (min-width:992px){.Underdog_center::before{width:90px;}}.Underdog_centerDesktop{position:relative;margin:0 0 20px;padding:0 0 20px;}@media (min-width:992px){.Underdog_centerDesktop{margin:0 0 30px;padding:0 0 30px;}}.Underdog_centerDesktop::before{content:'';position:absolute;left:0;bottom:0;width:70px;height:2px;background:#FFED95;}@media (min-width:992px){.Underdog_centerDesktop::before{width:90px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}}.Underdog_destination::before{background:#00AF98 !important;}.Underdog_arbor::before{background:#8DC640 !important;}.Filters_downloadIcon{font-weight:700;font-size:14px;color:#373736;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;padding:0 10px;}.Card_headline{font-weight:500;font-size:14px;color:#FFFFFF;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-transform:initial;background:rgba(121,196,177,0.6);padding:3px 5px;}body.ReactModal__Body--open{overflow:hidden;}.ReactModal__Overlay{background-color:rgba(0,0,0,0.19);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);}.widget-app-container{padding:0 16px 5px 0 !important;}.Navigation_top .HeaderAlt .StickyNav{position:absolute !important;}.close-policy-modal #djUgY2NwYS{display:none;}</style><div data-reactroot="" data-reactid="1" data-react-checksum="-137841226"><div data-reactid="2"><!-- react-empty: 3 --><!-- react-empty: 4 --><!-- react-empty: 5 --><!-- react-empty: 6 --><!-- react-empty: 7 --><style data-emotion-css="1dfc8aj">.css-1dfc8aj{position:relative;}@media (min-width:992px){.css-1dfc8aj .DetailSection{padding:60px 0;}}.css-1dfc8aj .DetailSection_heading{font-weight:700;font-size:15px;color:#373736;-webkit-letter-spacing:1px;-moz-letter-spacing:1px;-ms-letter-spacing:1px;letter-spacing:1px;text-transform:uppercase;margin:0;position:relative;font-family:ingra-condensed,serif;padding:16px 40px 16px 20px;}@media(min-width:992px){.css-1dfc8aj .DetailSection_heading{padding:20px;font-weight:700;font-size:34px;text-align:center;}}.css-1dfc8aj .DetailSection_heading::after{content:'';position:absolute;right:20px;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);border-left:6px solid transparent;border-right:6px solid transparent;border-top:9px solid #FFED95;-webkit-transition:all .3s ease;transition:all .3s ease;}@media(min-width:992px){.css-1dfc8aj .DetailSection_heading::after{right:unset;top:unset;bottom:0;left:50%;border:0;width:110px;height:2px;background:#FFED95;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}}.css-1dfc8aj .DetailSection_headingDestiny::after{border-top:9px solid #00AF98;}@media(min-width:992px){.css-1dfc8aj .DetailSection_headingDestiny::after{background:#00AF98;border:0;}}.css-1dfc8aj .DetailSection_heading-open::after{-webkit-transform:translateY(-50%) rotate(180deg);-ms-transform:translateY(-50%) rotate(180deg);transform:translateY(-50%) rotate(180deg);}.css-1dfc8aj .AccordionToggle_contentInterior{padding:30px 0;}@media (min-width:992px){.css-1dfc8aj .AccordionToggle_contentInterior{padding:30px 0;}}.css-1dfc8aj .CommunityDirections_p{font-weight:400;font-size:18px;color:#439374;-webkit-letter-spacing:0.16px;-moz-letter-spacing:0.16px;-ms-letter-spacing:0.16px;letter-spacing:0.16px;line-height:30px;}.css-1dfc8aj .HomeDirections_p p{font-weight:400;font-size:18px;color:#439374;-webkit-letter-spacing:0.16px;-moz-letter-spacing:0.16px;-ms-letter-spacing:0.16px;letter-spacing:0.16px;line-height:30px;}.css-1dfc8aj .CommunityOverview_modal{margin:20px 0 30px;}.css-1dfc8aj .CommunityOverview_modal .ContactModal_wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.css-1dfc8aj .CommunityOverview_modal .ContactModal_btn{font-family:ingra-condensed,serif;background:#79C4B1;width:100%;text-transform:uppercase;font-weight:800;font-size:16px;color:#FFFFFF;text-align:center;padding:13px 20px;-webkit-transition:all .3s ease;transition:all .3s ease;}@media (min-width:992px){.css-1dfc8aj .CommunityOverview_modal .ContactModal_btn{padding:18px 20px;font-size:20px;}}.css-1dfc8aj .CommunityOverview_modal .ContactModal_btn:hover{background:#6ebfab;-webkit-transform:scale(1.02);-ms-transform:scale(1.02);transform:scale(1.02);}.css-1dfc8aj.Destination_page .PageIntroBanner_heading::after,.css-1dfc8aj.Destination_page .PageSection_heading::after,.css-1dfc8aj.Destination_page .PageSection_header::after{background-color:#00AF98;}.css-1dfc8aj.Destination_page .btn-brand3,.css-1dfc8aj.Destination_page .btn-brand2{background-color:#00AF98;border:1px solid #00AF98;}</style><div class="css-1dfc8aj Navigation_top" data-reactid="8"><style data-emotion-css="1qzmv9">.css-1qzmv9{position:absolute;width:100%;z-index:50;}@media (min-width:992px){.css-1qzmv9{height:118px;}}.css-1qzmv9::after{content:'';display:none;position:absolute;width:100vw;height:500px;right:0;bottom:80px;background-color:rgba(191,221,189,0.6);-webkit-transform:skewY(11deg);-ms-transform:skewY(11deg);transform:skewY(11deg);}.css-1qzmv9 .MainNav{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;}@media (min-width:992px){.css-1qzmv9 .MainNav{padding:0;height:87px;}}.css-1qzmv9 .StickyNav{position:fixed;top:0;right:0;-webkit-transition:all .3s ease;transition:all .3s ease;}@media (min-width:992px){.css-1qzmv9 .StickyNav{top:30px;}}.css-1qzmv9 .PromoBannerPush{top:75px!important;}@media (min-width:992px){.css-1qzmv9 .PromoBannerPush{top:115px!important;}}</style><header class="css-1qzmv9 false" data-reactid="9"><style data-emotion-css="am0gzy">.css-am0gzy .AccessibilityLink{left:-999px;position:fixed;top:auto;width:1px;height:1px;overflow:hidden;z-index:-999;}.css-am0gzy .AccessibilityLink:focus,.css-am0gzy .AccessibilityLink:active{color:#FFFFFF;background-color:#373736;left:auto;top:auto;width:30%;height:auto;overflow:auto;margin:10px 35%;padding:5px;border-radius:0;border:4px solid #79C4B1;text-align:center;font-size:1.2em;z-index:999;}</style><div class="css-am0gzy" data-reactid="10"><a class="AccessibilityLink" href="#mainContent" data-reactid="11">Skip To Main Content</a><a class="AccessibilityLink" href="/accessibility" data-reactid="12">Accessibility Help & Feedback</a></div><style data-emotion-css="18ujiht">.css-18ujiht{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:fixed;z-index:1;width:100%;height:70px;padding:0 10px;-webkit-transition:filter 150ms ease;transition:filter 150ms ease;background:linear-gradient(270deg,#F48248,#EE413A);}.css-18ujiht:hover{-webkit-filter:brightness(0.95);filter:brightness(0.95);}@media (min-width:992px){.css-18ujiht{font-size:22px;height:85px;}}@media (min-width:1600px){.css-18ujiht{font-size:26px;}}.css-18ujiht .HeaderPromoBanner{width:100%;list-style:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0;position:relative;margin:0;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}.css-18ujiht .HeaderPromoBanner_preheadline{margin-right:8px;font-weight:700;font-style:italic;font-size:12px;color:#FFFFFF;}@media (min-width:450px){.css-18ujiht .HeaderPromoBanner_preheadline{font-size:16px;}}@media (min-width:992px){.css-18ujiht .HeaderPromoBanner_preheadline{font-size:inherit;}}.css-18ujiht .HeaderPromoBanner_headline{max-width:800px;}.css-18ujiht .HeaderPromoBanner_headline p{font-size:10px;font-weight:700;line-height:1;color:#FFFFFF;margin:0;}@media (min-width:450px){.css-18ujiht .HeaderPromoBanner_headline p{font-size:14px;}}@media (min-width:992px){.css-18ujiht .HeaderPromoBanner_headline p{font-weight:400;font-size:inherit;color:#FFFFFF;}}.css-18ujiht .HeaderPromoBanner_link{color:#FFFFFF;font-size:12px;line-height:1;font-weight:400;margin:0 0 0 10px;-webkit-text-decoration:underline;text-decoration:underline;}@media (min-width:992px){.css-18ujiht .HeaderPromoBanner_link{font-weight:700;font-size:inherit;color:#FFFFFF;font-style:italic;}}.css-18ujiht .HeaderPromoBanner_animation-enter{opacity:0;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);}.css-18ujiht .HeaderPromoBanner_animation-enter-active{opacity:1;-webkit-transition:all 250ms ease-in;transition:all 250ms ease-in;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-webkit-transition-delay:500ms;transition-delay:500ms;}.css-18ujiht .HeaderPromoBanner_animation-leave{position:absolute;opacity:1;}.css-18ujiht .HeaderPromoBanner_animation-leave-active{opacity:0;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);-webkit-transition:opacity 250ms ease-in,-webkit-transform 250ms ease-in;-webkit-transition:opacity 250ms ease-in,transform 250ms ease-in;transition:opacity 250ms ease-in,transform 250ms ease-in;}.css-18ujiht .HeaderPromo_innerWrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:70px;}@media (min-width:992px){.css-18ujiht .HeaderPromo_innerWrapper{height:85px;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;gap:25px;}}@media (min-width:1200px){.css-18ujiht .HeaderPromo_innerWrapper{gap:55px;}}.css-18ujiht .HeaderPromoIcon{display:block;width:auto;max-width:100%;height:50px;object-fit:contain;}@media (min-width:992px){.css-18ujiht .HeaderPromoIcon{max-width:70%;}}@media (min-width:1200px){.css-18ujiht .HeaderPromoIcon{height:60px;}}@media (min-width:1400px){.css-18ujiht .HeaderPromoIcon{height:70px;}}.css-18ujiht .HeaderPromo_inner-ImageOnlyPromo{padding:0px;width:100%;height:70px;max-width:100vw;}@media (min-width:992px){.css-18ujiht .HeaderPromo_inner-ImageOnlyPromo{height:85px;}}.css-18ujiht .HeaderPromo_inner-ImageOnlyPromo img{width:100%;height:100%;object-fit:contain;object-position:center;}</style><span class="css-18ujiht" data-reactid="13"><a href="https://silverthornehomes.com/indiana-incentives?utm_source=website&utm_medium=homepage+ribbon&utm_campaign=new+home+unlocked" target="_blank" rel="noopener noreferrer" class="HeaderPromoBanner" data-reactid="14"><div class="HeaderPromo_innerWrapper" data-reactid="15"><img src="https://s3.amazonaws.com/buildercloud/39d40e9b54351269780a519a96552cfe.png" class="HeaderPromoIcon" alt="best places to work badge" data-reactid="16"/><div data-reactid="17"><div class="HeaderPromoBanner_preheadline" data-reactid="18">Limited-Time Special Financing</div><div class="HeaderPromoBanner_headline" data-reactid="19"><p>Unlock Savings >><br /></p></div></div><div class="HeaderPromoBanner_link" data-reactid="20">Learn More</div></div></a></span><style data-emotion-css="1ge0cub">.css-1ge0cub .NavMenu-courtesy_nav{display:none;}@media (min-width:992px){.css-1ge0cub .NavMenu-courtesy_nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;top:0;right:0;left:0;z-index:1;}}.css-1ge0cub .NavMenu-courtesy_nav .CourtesyNav{list-style:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 60px 8px 0;position:fixed;width:100%;margin:0;}.css-1ge0cub .NavMenu-courtesy_nav .CourtesyNav::after{content:'';position:absolute;top:0;right:0;bottom:0;left:0;background-color:#FFFFFF;opacity:1;z-index:-1;}.css-1ge0cub .NavMenu-courtesy_nav .CourtesyNav_item{display:block;font-size:14px;line-height:1;padding:0 10px;}.css-1ge0cub .NavMenu-courtesy_nav .CourtesyNav_item:last-child{border-right:0;}.css-1ge0cub .NavMenu-courtesy_nav .CourtesyNav_item a{color:#373736;font-size:14px;line-height:1;font-weight:400;padding:0;-webkit-letter-spacing:.02rem;-moz-letter-spacing:.02rem;-ms-letter-spacing:.02rem;letter-spacing:.02rem;}@media (min-width:992px){.css-1ge0cub .NavMenu-courtesy_nav .CourtesyNav_item .FavoritesStatus-active{display:inline-block;position:relative;padding:0;background:none;}}.css-1ge0cub .NavMenu-courtesy_nav .ToggleNav_menuHeading{display:none;}.css-1ge0cub.PromoBannerPush .NavMenu-courtesy_nav{top:85px !important;}</style><div class="css-1ge0cub PromoBannerPush" data-reactid="21"><div data-reactid="22"><div class="" data-reactid="23"></div></div></div><div class="MainNav" data-reactid="24"><style data-emotion-css="nsxul9">.css-nsxul9{position:absolute;top:10px;left:0;padding:0 0 0 10px;}@media (min-width:992px){.css-nsxul9{top:30px;padding:0;}}.css-nsxul9.PromoBannerPush{top:80px;}@media (min-width:992px){.css-nsxul9.PromoBannerPush{top:115px;}}.css-nsxul9 .HeaderLogo_logoDesktop{display:block;width:auto;z-index:2;}@media(max-width:992px){.css-nsxul9 .HeaderLogo_logoDesktop{display:none;}}@media (min-width:992px){.css-nsxul9 .HeaderLogo_logoDesktop{padding:10px 15px 15px 15px;}}@media (min-width:1200px){.css-nsxul9 .HeaderLogo_logoDesktop{padding:30px 0 0 60px;}}.css-nsxul9 .HeaderLogo_logoMobile{display:block;width:auto;z-index:2;margin-top:-10px;}@media (min-width:992px){.css-nsxul9 .HeaderLogo_logoMobile{display:none;padding:10px 15px 15px 15px;}}@media (min-width:1200px){.css-nsxul9 .HeaderLogo_logoMobile{padding:30px 0 0 60px;}}.css-nsxul9 .HeaderLogo_image{height:40px;width:auto;}@media (min-width:992px){.css-nsxul9 .HeaderLogo_image{height:195px;width:auto;}}@media (min-width:1200px){.css-nsxul9 .HeaderLogo_image{height:200px;width:auto;}}.css-nsxul9 .HeaderLogo_imageBrand{height:48px;width:auto;}@media (min-width:992px){.css-nsxul9 .HeaderLogo_imageBrand{height:58px;width:auto;}}@media (min-width:1200px){.css-nsxul9 .HeaderLogo_imageBrand{height:120px;padding:0;width:auto;}}.css-nsxul9 .MainNav_backLink{background:#79C4B1;position:absolute;left:0px;top:52px;font-weight:700;font-size:11px;color:#FFFFFF;-webkit-letter-spacing:1px;-moz-letter-spacing:1px;-ms-letter-spacing:1px;letter-spacing:1px;text-transform:uppercase;padding:5px 20px 5px 30px;z-index:10;width:-webkit-max-content;width:-moz-max-content;width:max-content;text-align:center;}@media(min-width:992px){.css-nsxul9 .MainNav_backLink{width:100%;font-size:12px;width:calc(100% - 15px);right:0px;top:-29px;left:unset;}}.css-nsxul9 .MainNav_backLink::before{content:'';width:9px;height:9px;border-left:1px solid #FFED95;border-bottom:1px solid #FFED95;-webkit-transform:rotate(45deg) translateY(-50%);-ms-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%);position:absolute;left:9px;top:50%;}@media(min-width:992px){.css-nsxul9 .MainNav_backLink::before{left:16px;}}</style><div class="css-nsxul9 PromoBannerPush" data-reactid="25"><a class="HeaderLogo_logoDesktop" href="/" data-reactid="26"><img src="/images/logo-white.svg" height="70" width="228" alt="Silverthorne Homes" class="HeaderLogo_imageBrand" data-reactid="27"/></a><a class="HeaderLogo_logoMobile" href="/" data-reactid="28"><img src="/images/logo-brand.svg" height="70" width="228" alt="Silverthorne Homes" class="HeaderLogo_imageBrand" data-reactid="29"/></a></div><div class="StickyNav PromoBannerPush" data-reactid="30"><div class="d-flex" data-reactid="31"><style data-emotion-css="6kzk23">.css-6kzk23{display:none;}@media (min-width:992px){.css-6kzk23{display:block;position:relative;z-index:1;}}.css-6kzk23 .DesktopNav_nav{position:absolute;right:0px;width:-webkit-max-content;width:-moz-max-content;width:max-content;list-style:none;margin:0;padding:15px 125px 15px 15px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}@media (min-width:1128px){.css-6kzk23 .DesktopNav_nav{right:0px;padding:15px 145px 15px 15px;}}.css-6kzk23 .DesktopNav_navAlt2025{background:rgba(37,37,37,0.94);padding:0 145px 2px 0;margin:15px 0 0 0;}.css-6kzk23 .DesktopNav_navAlt{list-style:none;margin:0;padding:15px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(56,62,86,0.9);}.css-6kzk23 .DesktopNav_navItem{list-style:none;border-bottom:1px solid #F4F4F4;}@media (min-width:992px){.css-6kzk23 .DesktopNav_navItem{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;border:0;}}.css-6kzk23 .DesktopNav_navHeading{height:60px;padding:0 15px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;-webkit-letter-spacing:1px;-moz-letter-spacing:1px;-ms-letter-spacing:1px;letter-spacing:1px;font-weight:700;text-transform:uppercase;color:#FFFFFF;cursor:pointer;-webkit-transition:all .3s ease;transition:all .3s ease;font-family:ingra-condensed,serif;}@media (min-width:1128px){.css-6kzk23 .DesktopNav_navHeading{font-size:17px;}}.css-6kzk23 .DesktopNav_navHeading::after{content:'';border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #FFED95;position:relative;margin:0 0 0 5px;-webkit-transition:all .3s ease;transition:all .3s ease;}.css-6kzk23 .DesktopNav_navHeading:hover{outline:none;border:none;}.css-6kzk23 .DesktopNav_navHeading-link::after{display:none;}.css-6kzk23 .DesktopNav_navHeading.active::after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);}.css-6kzk23 .DesktopNav_menu{display:none;list-style:none;padding:0 0 15px 0;margin:0;position:relative;}@media (min-width:992px){.css-6kzk23 .DesktopNav_menu{position:absolute;top:75px;left:-14px;width:107%;background-color:#FFFFFF;color:#FFFFFF;padding:0 5px 5px 5px;font-size:15px;}}@media (min-width:992px){.css-6kzk23 .DesktopNav_navItem:last-child .DesktopNav_menu{left:auto;right:0;}}.css-6kzk23 .DesktopNav_menu-active{display:block;}.css-6kzk23 .DesktopNav_menuItem a{color:#373736;padding:12px 15px;display:block;-webkit-transition:all .3s ease;transition:all .3s ease;background-color:#FFFFFF;font-weight:700;white-space:nowrap;text-transform:uppercase;}.css-6kzk23 .DesktopNav_menuItem a:hover{background-color:#dceddb;}.css-6kzk23 .DesktopNav_navContact{list-style:none;position:relative;z-index:5;margin:0;padding:15px 30px 15px 0;height:90px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-6kzk23 .DesktopNav_navItemContact{list-style:none;border-bottom:1px solid #F4F4F4;font-size:14px;-webkit-letter-spacing:1px;-moz-letter-spacing:1px;-ms-letter-spacing:1px;letter-spacing:1px;font-weight:700;text-transform:uppercase;border:0;color:#FFFFFF;font-family:ingra-condensed,serif;cursor:pointer;}@media (min-width:1128px){.css-6kzk23 .DesktopNav_navItemContact{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;font-size:17px;}}</style><div class="css-6kzk23" data-reactid="32"><div data-reactid="33"><div class="DesktopNav_nav" data-reactid="34"></div></div><span class="DesktopNav_navContact" data-reactid="35"><div class="ContactModal_wrapper" data-reactid="36"><span role="button" tabindex="0" class="ContactModal_btn " data-reactid="37"><span class="DesktopNav_navItemContact" data-reactid="38">Request Info</span></span><!-- react-empty: 39 --></div></span></div><div data-reactid="40"><style data-emotion-css="gpjf23">.css-gpjf23{display:block;position:relative;margin:15px 0 0 0;z-index:5;}.css-gpjf23 .ToggleNav_button{display:block;background:transparent;border:0;padding:20px 15px;}@media (min-width:992px){.css-gpjf23 .ToggleNav_button{display:none;}}.css-gpjf23 .ToggleNav_buttonShowDesktop{display:block;background:#373736;border:0;padding:20px 30px;}@media (min-width:992px){.css-gpjf23 .ToggleNav_buttonShowDesktop{margin:0;}}.css-gpjf23 .ToggleNav_buttonIcon{width:40px;height:22px;position:relative;margin:0 auto;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:.5s ease-in-out;-moz-transition:.5s ease-in-out;-o-transition:.5s ease-in-out;-webkit-transition:.5s ease-in-out;transition:.5s ease-in-out;cursor:pointer;}.css-gpjf23 .ToggleNav_buttonIcon span{display:block;position:absolute;height:2px;width:100%;background:#FFFFFF;border-radius:1px;opacity:1;left:0;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:.25s ease-in-out;-moz-transition:.25s ease-in-out;-o-transition:.25s ease-in-out;-webkit-transition:.25s ease-in-out;transition:.25s ease-in-out;}.css-gpjf23 .ToggleNav_buttonIcon span:nth-child(1){top:0px;}.css-gpjf23 .ToggleNav_buttonIcon span:nth-child(2),.css-gpjf23 .ToggleNav_buttonIcon span:nth-child(3){top:9px;}.css-gpjf23 .ToggleNav_buttonIcon span:nth-child(4){top:18px;}.css-gpjf23 .ToggleNav_buttonIcon.open span:nth-child(1){top:9px;width:0%;left:50%;}.css-gpjf23 .ToggleNav_buttonIcon.open span:nth-child(2){-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);}.css-gpjf23 .ToggleNav_buttonIcon.open span:nth-child(3){-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);}.css-gpjf23 .ToggleNav_buttonIcon.open span:nth-child(4){top:9px;width:0%;left:50%;}.css-gpjf23 .ToggleNav_wrapper{position:absolute;top:60px;right:-15px;bottom:0;padding:20px 0 45px 0;width:100vw;z-index:100;background-color:#FFFFFF;-webkit-transform:translateY(-300vw);-ms-transform:translateY(-300vw);transform:translateY(-300vw);-webkit-transition:-webkit-transform 350ms cubic-bezier(0.165,0.84,0.44,1);-webkit-transition:transform 350ms cubic-bezier(0.165,0.84,0.44,1);transition:transform 350ms cubic-bezier(0.165,0.84,0.44,1);height:80vh;max-height:716px;overflow:scroll;box-shadow:0 10px 15px 0 rgba(0,0,0,0.30);}@media (min-width:1200px){.css-gpjf23 .ToggleNav_wrapper{top:90px;right:0;padding:45px 20px;width:450px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;overflow-y:scroll;}}.css-gpjf23 .ToggleNav_wrapper-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}.css-gpjf23 .ToggleNav_menuCloseWrapper{display:none;}@media (min-width:1200px){.css-gpjf23 .ToggleNav_menuCloseWrapper{display:block;position:absolute;right:15px;top:15px;}}.css-gpjf23 .ToggleNav_menu{list-style:none;margin:0;padding:0 20px;text-align:left;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}@media (min-width:1200px){.css-gpjf23 .ToggleNav_menu{max-width:450px;margin:0 auto;}}.css-gpjf23 .ToggleNav_menuItem{list-style:none;width:100%;position:relative;}@media (min-width:1200px){.css-gpjf23 .ToggleNav_menuItem{display:inline-block;margin:0;vertical-align:top;border:0;}}.css-gpjf23 .ToggleNav_menuHeading{font-size:18px;font-weight:800;padding:15px;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#373736;font-family:ingra-condensed,serif;text-transform:uppercase;background-color:#F4F4F4;margin:2px 0;}@media (min-width:992px){.css-gpjf23 .ToggleNav_menuHeading{background-color:transparent;padding:10px 15px;}}.css-gpjf23 .ToggleNav_menuHeading::after{content:'';border-left:2px solid #79C4B1;border-bottom:2px solid #79C4B1;position:relative;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg);position:absolute;right:30px;top:26px;width:9px;height:9px;-webkit-transition:all .3s ease;transition:all .3s ease;}.css-gpjf23 .ToggleNav_menuHeading.open::after{-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg);}.css-gpjf23 .ToggleNav_menuHeading-link::after{display:none;}.css-gpjf23 .ToggleNav_menuLink{font-size:18px;font-weight:800;padding:15px 0;cursor:pointer;display:block;color:#439374;font-family:ingra-condensed,serif;}@media (min-width:1200px){.css-gpjf23 .ToggleNav_menuLink{font-weight:400;font-size:14px;cursor:default;position:relative;padding:0 15px;line-height:100px;height:100px;-webkit-transition:all .3s ease;transition:all .3s ease;cursor:pointer;text-transform:uppercase;font-weight:700;-webkit-letter-spacing:1px;-moz-letter-spacing:1px;-ms-letter-spacing:1px;letter-spacing:1px;}.css-gpjf23 .ToggleNav_menuLink:hover,.css-gpjf23 .ToggleNav_menuLink:focus{outline:none;border:none;}}.css-gpjf23 .ToggleNav_subMenu{display:none;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;list-style:none;padding:0 20px 15px;margin:0;position:relative;}@media (min-width:992px){.css-gpjf23 .ToggleNav_subMenu{gap:5px;}}@media (min-width:1200px){.css-gpjf23 .ToggleNav_menuItem:last-child .ToggleNav_subMenu{left:auto;right:0;}}.css-gpjf23 .ToggleNav_subMenu-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.css-gpjf23 .ToggleNav_subMenuItem a{color:#439374;font-family:ingra-condensed,serif;padding:8px 10px;display:block;-webkit-transition:all .3s ease;transition:all .3s ease;background-color:transparent;font-weight:600;}@media (min-width:992px){.css-gpjf23 .ToggleNav_subMenuItem a{background-color:#F4F4F4;}}.css-gpjf23 .ToggleNav_subMenuItem a:hover{color:#397e63;}.css-gpjf23 .ToggleNav_subSubMenu{list-style:none;padding:0 0 15px 0;margin:0;position:relative;}.css-gpjf23 .ToggleNav_subSubMenu .ToggleNav_subSubMenuHeading{font-weight:700 !important;padding:8px 15px;display:block;}.css-gpjf23 .ToggleNav_subSubMenu .ToggleNav_subMenuItem a{font-weight:400;}.css-gpjf23 .NavMenu-shop-by-area{display:none;}@media (min-width:1200px){.css-gpjf23 .NavMenu-shop-by-area{display:block;}}</style><div class="css-gpjf23" data-reactid="41"><button class="ToggleNav_buttonShowDesktop" data-reactid="42"><div class="ToggleNav_buttonIcon " data-reactid="43"><span data-reactid="44"></span><span data-reactid="45"></span><span data-reactid="46"></span><span data-reactid="47"></span></div><span class="sr-only sr-only-focusable" data-reactid="48">Toggle Menu</span></button><div class="ToggleNav_wrapper " data-reactid="49"><div class="ToggleNav_menuCloseWrapper" data-reactid="50"><button class="ToggleNav_button" data-reactid="51"><div class="ToggleNav_buttonIcon " data-reactid="52"><span data-reactid="53"></span><span data-reactid="54"></span><span data-reactid="55"></span><span data-reactid="56"></span></div><span class="sr-only sr-only-focusable" data-reactid="57">Toggle Menu</span></button></div><div data-reactid="58"><div class="ToggleNav_menu" data-reactid="59"></div></div></div></div></div><!-- react-empty: 60 --></div></div></div></header><div id="mainContent" data-reactid="61"><div data-reactid="62"><!-- react-empty: 63 --></div><style data-emotion-css="1lk8x9m">.css-1lk8x9m{position:relative;z-index:0;}.css-1lk8x9m .DetailSection{position:relative;}@media(min-width:768px){.css-1lk8x9m .ScrollTarget{padding:50px 0;position:absolute;top:-100px;left:0;}}.css-1lk8x9m .OverviewFormWrapper{background-color:#F4F4F4;padding:30px 15px;}.css-1lk8x9m.DetailPage_wrapper-destination .Underdog_left::before{background:#00AF98;}.css-1lk8x9m.DetailPage_wrapper-destination .Carousel_contactWrapper .ContactModal_btn,.css-1lk8x9m.DetailPage_wrapper-destination .ContactModal_wrapper .ContactModal_btn{background:#00AF98;}.css-1lk8x9m.DetailPage_wrapper-destination .Carousel_thumbnailItem-active::after{background:#00AF98;}.css-1lk8x9m.DetailPage_wrapper-destination .DetailSection_heading::after{border-top:9px solid #00AF98;}@media (min-width:992px){.css-1lk8x9m.DetailPage_wrapper-destination .DetailSection_heading::after{border:0;background:#00AF98;}}.css-1lk8x9m.DetailPage_wrapper-destination .AvailableComm_btn::after{border-top:7px solid #00AF98;}.css-1lk8x9m.DetailPage_wrapper-destination .AvailableComm_citiesItem.active{color:#00AF98 !important;}.css-1lk8x9m.DetailPage_wrapper-destination .PageMainMenu_listItem a.active{color:#00AF98 !important;}.css-1lk8x9m.DetailPage_wrapper-destination .Carousel_banner{background:#00AF98;}.css-1lk8x9m.DetailPage_wrapper-Arbor .Underdog_left::before{background:#8DC640;}.css-1lk8x9m.DetailPage_wrapper-Arbor .Carousel_contactWrapper .ContactModal_btn,.css-1lk8x9m.DetailPage_wrapper-Arbor .ContactModal_wrapper .ContactModal_btn{background:#8DC640;}.css-1lk8x9m.DetailPage_wrapper-Arbor .Carousel_thumbnailItem-active::after{background:#8DC640;}.css-1lk8x9m.DetailPage_wrapper-Arbor .DetailSection_heading::after{border-top:9px solid #8DC640;}@media (min-width:992px){.css-1lk8x9m.DetailPage_wrapper-Arbor .DetailSection_heading::after{border:0;background:#8DC640;}}.css-1lk8x9m.DetailPage_wrapper-Arbor .AvailableComm_btn::after{border-top:7px solid #8DC640;}.css-1lk8x9m.DetailPage_wrapper-Arbor .AvailableComm_citiesItem.active{color:#8DC640 !important;}.css-1lk8x9m.DetailPage_wrapper-Arbor .PageMainMenu_listItem a.active{color:#8DC640 !important;}.css-1lk8x9m.DetailPage_wrapper-Arbor .DetailSection_contentItem .btn-brand2{background:#8DC640 !important;}.css-1lk8x9m.DetailPage_wrapper-Arbor .Carousel_banner{background:#8DC640;}.css-1lk8x9m .StickyNav{top:200px !important;}</style><div class="css-1lk8x9m undefined" data-reactid="64"><style data-emotion-css="evtxa6">.css-evtxa6{position:relative;}.css-evtxa6 .CarouselPhotoGallery_image{position:relative;margin:0 0 5px;position:relative;min-height:350px;}@media(min-width:768px){.css-evtxa6 .CarouselPhotoGallery_image{margin:0 0 15px;}}@media(min-width:992px){.css-evtxa6 .CarouselPhotoGallery_image{margin:0 0 15px;}}@media(min-width:1600px){.css-evtxa6 .CarouselPhotoGallery_image{overflow:hidden;}}.css-evtxa6 .CarouselPhotoGallery_image img{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;object-fit:cover;}.css-evtxa6 .CarouselPhotoGallery_image .CarouselPhotoGallery_imageElement{position:absolute;left:0;right:0;top:0;bottom:0;z-index:2;margin:0;padding:0;width:100%;}.css-evtxa6 .Carousel_image{position:relative;margin:0 0 5px;padding-bottom:calc(54.9% - 5px);position:relative;min-height:350px;}@media(min-width:768px){.css-evtxa6 .Carousel_image{margin:0 0 15px;padding-bottom:calc(min(56.25%,100vh) - 15px);}}@media(min-width:992px){.css-evtxa6 .Carousel_image{margin:0 15px 15px;}}@media(min-width:1600px){.css-evtxa6 .Carousel_image{overflow:hidden;}}.css-evtxa6 .Carousel_image::after{content:'';position:absolute;left:0;bottom:0;width:100%;height:75%;background-image:linear-gradient(180deg,rgba(0,0,0,0.00) 4%,rgba(0,0,0,0.72) 99%);}.css-evtxa6 .Carousel_image img{position:absolute;left:0;right:0;top:0;bottom:0;height:100%;object-fit:cover;}.css-evtxa6 .Carousel_h2Wrapper{display:none;}@media(min-width:992px){.css-evtxa6 .Carousel_h2Wrapper{display:block;position:absolute;left:0;bottom:0;width:100%;height:-webkit-max-content;height:-moz-max-content;height:max-content;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding:70px;z-index:10;}}.css-evtxa6 .Carousel_h2{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-weight:700;font-size:45px;color:#FFFFFF;-webkit-letter-spacing:1.04px;-moz-letter-spacing:1.04px;-ms-letter-spacing:1.04px;letter-spacing:1.04px;text-shadow:0 4px 17px rgba(0,0,0,0.24);text-transform:uppercase;}.css-evtxa6 .Carousel_h2 span{font-weight:500;font-size:20px;color:#FFFFFF;-webkit-letter-spacing:2px;-moz-letter-spacing:2px;-ms-letter-spacing:2px;letter-spacing:2px;}.css-evtxa6 .Carousel_h2Lead{font-weight:500;font-size:20px;color:#FFFFFF;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;font-style:italic;}.css-evtxa6 .Carousel_contactWrapper{position:absolute;right:0;bottom:0;z-index:100;}@media(min-width:992px){.css-evtxa6 .Carousel_contactWrapper{bottom:70px;right:65px;}}.css-evtxa6 .Carousel_contactWrapper .ContactModal_wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.css-evtxa6 .Carousel_contactWrapper .ContactModal_btn{font-weight:800;font-size:14px;color:#FFFFFF;background:#FFED95;text-transform:uppercase;-webkit-letter-spacing:0.78px;-moz-letter-spacing:0.78px;-ms-letter-spacing:0.78px;letter-spacing:0.78px;text-align:center;padding:13px 25px;}@media (min-width:992px){.css-evtxa6 .Carousel_contactWrapper .ContactModal_btn{padding:20px 35px;font-size:18px;-webkit-letter-spacing:1px;-moz-letter-spacing:1px;-ms-letter-spacing:1px;letter-spacing:1px;-webkit-transition:all .3s ease;transition:all .3s ease;}.css-evtxa6 .Carousel_contactWrapper .ContactModal_btn:hover{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05);}}.css-evtxa6 .Carousel_contactWrapperDestination .ContactModal_btn{background:#00AF98;}</style><div class="css-evtxa6" id="top" data-reactid="65"><div class="CarouselPhotoGallery_image" data-reactid="66"><div class="Carousel_image" data-reactid="67"><img src="https://dlqxt4mfnxo6k.cloudfront.net/silverthornehomes.com/aHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2J1aWxkZXJjbG91ZC9mNzcxODkxYWJhNjg1OGMzZTYzOWZiMmEwOTM2Zjg0Ni5qcGVn/exact/webp/2000/1100" alt="" data-reactid="68"/><div class="Carousel_h2Wrapper" data-reactid="69"><h1 class="Carousel_h2 Underdog_left" data-reactid="70"><!-- react-text: 71 -->4877 Haven Ponds Drive<!-- /react-text --><span class="DetailsPage_h2" data-reactid="72">McCordsville, IN 46055</span></h1></div><div class="Carousel_contactWrapper" data-reactid="73"><a href="#inquire" class="btn btn-brand3 " data-reactid="74">Learn More</a></div></div></div></div><style data-emotion-css="16aa6yf">.css-16aa6yf{position:relative;z-index:1;}@media (min-width:992px){.css-16aa6yf{background:#F4F4F4;}}.css-16aa6yf .Breadcrumbs_wrapper{height:auto;}.css-16aa6yf .Breadcrumbs_wrapper .Breadcrumbs_list{margin:0;padding:0;height:100%;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;}.css-16aa6yf .Breadcrumbs_wrapper .Breadcrumbs_list .Breadcrumbs_listItem{-webkit-transition:all .3s ease-out;transition:all .3s ease-out;position:relative;text-transform:capitalize;font-weight:600;font-size:12px;color:#3A3C3D;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;padding:15px 0;}@media (min-width:992px){.css-16aa6yf .Breadcrumbs_wrapper .Breadcrumbs_list .Breadcrumbs_listItem{padding:19px 0;font-weight:700;font-size:14px;color:#3A3C3D;}}.css-16aa6yf .Breadcrumbs_wrapper .Breadcrumbs_list .Breadcrumbs_listItem a{color:#3A3C3D;}.css-16aa6yf .Breadcrumbs_wrapper .Breadcrumbs_list .Breadcrumbs_listItem:hover{color:#BFDDBD;-webkit-transition:all .3s ease-out;transition:all .3s ease-out;}.css-16aa6yf .Breadcrumbs_wrapper .Breadcrumbs_list .Breadcrumbs_listItem::after{content:'/';margin:0 3px;}.css-16aa6yf .Breadcrumbs_wrapper .Breadcrumbs_list .Breadcrumbs_listItem:last-child::after{content:'';margin:0;}</style><div class="css-16aa6yf" data-reactid="75"><div class="container" data-reactid="76"><div class="Breadcrumbs_wrapper" data-reactid="77"><ul class="Breadcrumbs_list" data-reactid="78"><li class="Breadcrumbs_listItem" data-reactid="79"><a class="" href="/homes" data-reactid="80">Homes</a></li><li class="Breadcrumbs_listItem" data-reactid="81"><a class="" href="/homes/indiana" data-reactid="82">Indiana</a></li><li class="Breadcrumbs_listItem" data-reactid="83"><a class="" href="/homes/indiana/mccordsville" data-reactid="84">McCordsville</a></li><li class="Breadcrumbs_listItem" data-reactid="85">4877 Haven Ponds Drive</li></ul></div></div></div><style data-emotion-css="1a6i56p">.css-1a6i56p .HomeOverview_wrapper{gap:30px;}@media(min-width:992px){.css-1a6i56p .HomeOverview_wrapper{gap:60px;}}@media(min-width:1200px){.css-1a6i56p .HomeOverview_wrapper{gap:80px;}}.css-1a6i56p .HomeOverview_content{width:100%;}@media(min-width:992px){.css-1a6i56p .HomeOverview_content{width:auto;-webkit-flex:1;-ms-flex:1;flex:1;}}.css-1a6i56p .HomeOverview_model{width:min(100vw,360px);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media(min-width:768px){.css-1a6i56p .HomeOverview_model{width:min(50vw,420px);}}.css-1a6i56p .HomeOverview_title{font-weight:800;font-size:20px;color:#373736;font-family:ingra-condensed,serif;text-transform:uppercase;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;}@media(min-width:992px){.css-1a6i56p .HomeOverview_title{font-weight:700;font-size:34px;}}.css-1a6i56p .HomeOverview_title span{font-weight:600;font-size:16px;color:#464645;}.css-1a6i56p .HomeOverview_lead p{font-weight:400;font-size:16px;color:#373736;-webkit-letter-spacing:0.15px;-moz-letter-spacing:0.15px;-ms-letter-spacing:0.15px;letter-spacing:0.15px;line-height:29px;}@media(min-width:992px){.css-1a6i56p .HomeOverview_lead p{font-size:18px;-webkit-letter-spacing:0.16px;-moz-letter-spacing:0.16px;-ms-letter-spacing:0.16px;letter-spacing:0.16px;line-height:37px;}}.css-1a6i56p .CommunityOverview_formHeadline{font-weight:600;font-size:24px;color:#79C4B1;line-height:2;text-transform:uppercase;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}.css-1a6i56p .HomeOverview_truncate{height:245px;overflow-y:hidden;position:relative;}.css-1a6i56p .HomeOverview_truncate::after{content:'';width:100%;height:30%;position:absolute;left:0;bottom:0;background-image:linear-gradient(180deg,rgba(255,255,255,0.00) 0%,#FFFFFF 91%);}.css-1a6i56p .HomeOverview_read{font-weight:600;font-size:16px;color:#373736;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-align:center;}.css-1a6i56p .HomeOverview_list{gap:20px;}.css-1a6i56p .HomeOverview_list li{font-weight:500;font-size:14px;color:#1D252C;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-align:center;}@media(min-width:992px){.css-1a6i56p .HomeOverview_list li{background:#f6f6f6;font-weight:600;font-size:15px;padding:10px 20px;}}.css-1a6i56p .HomeOverview_leadFeatures ul{list-style:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:1rem 0 0;gap:10px;padding:0;}.css-1a6i56p .HomeOverview_leadFeatures ul li{font-weight:500;font-size:13px;color:#1D252C;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-align:center;}@media(min-width:992px){.css-1a6i56p .HomeOverview_leadFeatures ul li{background:#f6f6f6;font-weight:600;font-size:13px;padding:5px 10px;}}.css-1a6i56p .HomeOverview_subtitle{font-weight:500;font-size:18px;color:#3A3C3D;-webkit-letter-spacing:0.78px;-moz-letter-spacing:0.78px;-ms-letter-spacing:0.78px;letter-spacing:0.78px;text-transform:uppercase;}@media(min-width:992px){.css-1a6i56p .HomeOverview_subtitle{font-size:20px;-webkit-letter-spacing:0.87px;-moz-letter-spacing:0.87px;-ms-letter-spacing:0.87px;letter-spacing:0.87px;}}.css-1a6i56p .HomeOverview_modelImage{position:relative;margin-top:30px;}@media(min-width:992px){.css-1a6i56p .HomeOverview_modelImage{margin-top:60px;}}.css-1a6i56p .HomeOverview_modelImage span{position:absolute;width:100%;bottom:0;left:0;font-weight:700;font-size:16px;color:#79C4B1;-webkit-letter-spacing:0.8px;-moz-letter-spacing:0.8px;-ms-letter-spacing:0.8px;letter-spacing:0.8px;text-align:left;text-transform:uppercase;padding:10px 0px 0px;line-height:1;}@media(min-width:992px){.css-1a6i56p .HomeOverview_modelImage span{font-size:24px;-webkit-letter-spacing:1px;-moz-letter-spacing:1px;-ms-letter-spacing:1px;letter-spacing:1px;}}.css-1a6i56p .HomeOverview_modelImageDestination{background:rgba(87,94,123,0.95) !important;}.css-1a6i56p .HomeOverview_modelAddress{padding:5px 0 15px;border-bottom:1px solid #eeeeee;}.css-1a6i56p .HomeOverview_modelAddress h5{font-weight:500;font-size:16px;color:#3A3C3D;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;}@media (min-width:992px){.css-1a6i56p .HomeOverview_modelAddress h5{font-size:18px;}}.css-1a6i56p .HomeOverview_modelHomesAddress{max-width:calc(100% - 187px);}.css-1a6i56p .HomeOverview_pin{font-weight:700;font-size:14px;color:#79C4B1;-webkit-letter-spacing:0.5px;-moz-letter-spacing:0.5px;-ms-letter-spacing:0.5px;letter-spacing:0.5px;text-transform:uppercase;background:#F6F6F6;padding:15px 20px;-webkit-transition:all .3s ease;transition:all .3s ease;}.css-1a6i56p .HomeOverview_pin:hover{background:#EAEAEA;-webkit-transform:scale(1.02);-ms-transform:scale(1.02);transform:scale(1.02);}.css-1a6i56p .HomeOverview_modal{margin:-25px 0 30px;}.css-1a6i56p .HomeOverview_modal .ContactModal_wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.css-1a6i56p .HomeOverview_modal .ContactModal_btn{background:#79C4B1;width:100%;text-transform:uppercase;font-weight:800;font-size:22px;color:#FFFFFF;font-family:ingra-condensed,serif;text-align:center;padding:13px 20px;-webkit-transition:all .3s ease;transition:all .3s ease;margin-top:30px;}@media (min-width:992px){.css-1a6i56p .HomeOverview_modal .ContactModal_btn{padding:18px 20px;}}.css-1a6i56p .HomeOverview_modal .ContactModal_btn:hover{background:#6ebfab;-webkit-transform:scale(1.02);-ms-transform:scale(1.02);transform:scale(1.02);}.css-1a6i56p .HomeOverview_iconList{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:20px;}@media (min-width:768px){.css-1a6i56p .HomeOverview_iconList{gap:min(5vw,55px);}}.css-1a6i56p .HomeOverview_iconList .HomeOverview_iconListItem{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-weight:500;font-size:16px;color:#3A3C3D;text-transform:uppercase;-webkit-letter-spacing:0.7px;-moz-letter-spacing:0.7px;-ms-letter-spacing:0.7px;letter-spacing:0.7px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-1a6i56p .HomeOverview_price{background:#F4F4F4;padding:15px 30px;font-size:16px;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;line-height:18px;text-align:center;}@media (min-width:992px){.css-1a6i56p .HomeOverview_price{font-size:18px;line-height:20px;}}.css-1a6i56p .HomeOverview_price b{font-weight:700;}.css-1a6i56p .HomeFeatures_Title{font-size:20px;color:#3e886c;}.css-1a6i56p .CommunityOverview_MapPin{height:40px;margin:8px 10px 0 0;}</style><div class="css-1a6i56p" data-reactid="86"><div class="ScrollTarget" id="overview" data-reactid="87"></div><style data-emotion-css="1cpq40e">.css-1cpq40e .AccordionToggle_button{cursor:pointer;}.css-1cpq40e .AccordionToggle_button:focus{outline:none;}.css-1cpq40e .AccordionToggle_content{height:0;overflow-y:hidden;}.css-1cpq40e .AccordionToggle_content transition:height{-webkit-transitionTime;transitionTime;}.css-1cpq40e .AccordionToggle_controlRef{display:block;}@media (min-width:992px){.css-1cpq40e.NoToggleDesktop .AccordionToggle_contentNoToggle{height:auto;-webkit-transition:none;transition:none;}.css-1cpq40e.NoToggleDesktop .AccordionToggle_controlRef{display:none;}}</style><div class="css-1cpq40e NoToggleDesktop" data-reactid="88"><div class="AccordionToggle_controlRef" data-reactid="89"></div><div class="DetailSection_headingWrapper d-lg-none" data-reactid="90"><h3 class="DetailSection_heading undefined" data-reactid="91">Overview</h3></div><div class="AccordionToggle_content AccordionToggle_contentNoToggle" data-reactid="92"><div class="AccordionToggle_contentInterior" data-reactid="93"><div class="container" data-reactid="94"><div class="d-flex flex-wrap align-items-start HomeOverview_wrapper" data-reactid="95"><div class="HomeOverview_content" data-reactid="96"><div class="d-flex flex-wrap justify-content-between align-items-start" data-reactid="97"><h3 class="HomeOverview_title Underdog_left d-flex flex-column mr-3" data-reactid="98"><!-- react-text: 99 -->4877 Haven Ponds Drive<!-- /react-text --><span class="" data-reactid="100">McCordsville, IN 46055</span></h3><div class="d-flex mb-4 align-items-center HomeOverview_price" data-reactid="101"><!-- react-text: 102 -->Price: <!-- /react-text --><b class="ml-3" data-reactid="103">$482,995</b></div></div><ul class="HomeOverview_iconList list-unstyled" data-reactid="104"><li class="HomeOverview_iconListItem mr-xl-auto" data-reactid="105"><!-- react-text: 106 -->Floor Plan<!-- /react-text --><a class="" href="/plan/indiana/mccordsville/haven-ponds/van-buren" data-reactid="107"><b data-reactid="108">The Van Buren</b></a></li><li class="HomeOverview_iconListItem" data-reactid="109"><b data-reactid="110">5</b><!-- react-text: 111 -->Beds<!-- /react-text --></li><li class="HomeOverview_iconListItem" data-reactid="112"><b data-reactid="113"><!-- react-text: 114 -->3<!-- /react-text --><!-- react-text: 115 --> <!-- /react-text --><!-- react-text: 116 -->.5<!-- /react-text --></b><!-- react-text: 117 -->Baths<!-- /react-text --></li><li class="HomeOverview_iconListItem" data-reactid="118"><b data-reactid="119">2</b><!-- react-text: 120 -->Stories<!-- /react-text --></li><li class="HomeOverview_iconListItem" data-reactid="121"><b data-reactid="122"><!-- react-text: 123 -->3<!-- /react-text --><!-- react-text: 124 -->-Car<!-- /react-text --></b><!-- react-text: 125 -->Garage<!-- /react-text --></li><li class="HomeOverview_iconListItem" data-reactid="126"><b data-reactid="127">3,134</b><!-- react-text: 128 -->SQ. FT.<!-- /react-text --></li><li class="HomeOverview_iconListItem" data-reactid="129"><b data-reactid="130">61</b><!-- react-text: 131 -->Lot #<!-- /react-text --></li></ul><div class="HomeOverview_truncate" data-reactid="132"><div class="HomeOverview_lead" data-reactid="133"><p>Welcome to this thoughtfully designed Van Buren floor plan, offering generous living spaces, versatile functionality, and stylish finishes in the beautiful Haven Ponds community. Located in the heart of McCordsville, Haven Ponds provides the perfect balance of small-town charm and everyday convenience, with easy access to Fishers, I-69 and I-70. Residents enjoy proximity to Hamilton Town Center, local dining, shopping, parks, and highly regarded schools, creating an ideal setting for both work and leisure.</p><p>This attractive two-story home showcases charming curb appeal with Stone Mill brick complemented by Mega Greige engineered wood siding, a welcoming front porch, and an expansive 3-car side-load garage. Just off the foyer, a flexible front room with double glass doors with decorative grids provides the perfect space for a home office, den, or hobby room.</p><p>At the center of the home, the open-concept kitchen, café, and great room create an inviting environment for gathering and entertaining. The kitchen features Bianco Marina Oro quartz countertops, 42" upper cabinets in Arid, a spacious center island, and a stainless steel appliance package including a gas range, microwave, and dishwasher. Marina luxury vinyl plank flooring extends throughout the main living areas, while Ecru carpet adds warmth and comfort upstairs in the bedrooms and loft.</p><p>A private first floor in-law suite with a full bath offers exceptional flexibility for guests, extended family, or multi-generational living. Upstairs, the spacious primary suite provides a relaxing retreat complete with a beautifully appointed bath featuring a 60" tiled shower and a double bowl vanity. Three additional bedrooms, a centrally located hall bath with double bowl vanity, and a versatile loft provide plenty of room for everyone to spread out and enjoy.</p><p>As a brand new home, you'll appreciate modern construction, contemporary finishes, efficiency and the confidence that comes with builder warranty coverage. Contact our community sales manager today to learn more about this outstanding quick move-in opportunity in Haven Ponds!<br /></p></div></div><span class="HomeOverview_read" role="button" tabindex="0" data-reactid="134">Read More</span><a href="https://pdf-gen-api.mybuildercloud.com?title=4877 Haven Ponds Drive&url=about%3A%2F%2F%3A%2Fhome-detail-pdf%2Fhaven-ponds%2F4877-haven-ponds-drive" class="btn btn-body btn-download-white
+ mt-3" target="_blank" rel="noopener noreferrer" data-reactid="135">Download PDF</a><div class="mt-5" data-reactid="136"><h4 class="HomeOverview_subtitle" data-reactid="137">Features</h4><div class="HomeOverview_leadFeatures" data-reactid="138"><p></p><ul><li><span>Elevation C, Brick A</span></li><li>Stone Mill Brick with Mega Greige Engineered Wood Siding</li><li>Double Glass Doors with Decorative Grids at Flex Room</li><li>Main-Level In-Law Suite</li><li>3-Car Side-Load Garage</li><li>12' x 10' Patio</li><li>Water Softener Bypass Rough-In</li><li>Quartz Countertops (Bianco Marina Oro in Kitchen, Absolute White in Baths)</li><li>42" Tall Straight-Wall Upper Kitchen Cabinets (Arid)</li><li>Gas Range, Microwave, and Dishwasher (Stainless Steel)</li><li>Luxury Vinyl Plank Flooring Throughout Common Areas (Marina)</li><li>Carpet in Bedrooms and Loft (Ecru)</li><li>60" Tiled Shower in Primary Bath</li><li>Double Bowl Vanity in Primary and Hall Bath</li></ul><p></p></div></div><div class="mt-5" data-reactid="139"><h4 class="HomeOverview_subtitle" data-reactid="140">Area Schools</h4><ul class="list-unstyled d-flex flex-wrap HomeOverview_list mt-3" data-reactid="141"><li data-reactid="142">Fortville Elementary School</li><li data-reactid="143">Mt. Vernon Middle School</li><li data-reactid="144">Mt. Vernon High School</li></ul></div></div><div class="HomeOverview_model" data-reactid="145"><a class="HomeOverview_modelImage" href="/neighborhoods/indiana/mccordsville/haven-ponds" data-reactid="146"><span class="" data-reactid="147">Visit Haven Ponds</span></a><div class="" data-reactid="148"><div class="d-flex align-items-start HomeOverview_modelAddress" data-reactid="149"><a href="https://www.google.com/maps/place/39.926733,-85.89752/@39.926733,-85.89752,18z" class="HomeOverview_pin" data-reactid="150"><img src="/images/icon-map-pin-blue.svg" alt="Icon Pin" class="mr-1" data-reactid="151"/><!-- react-text: 152 --> Directions<!-- /react-text --></a></div></div><div class="HomeOverview_modal mt-4" id="inquire" data-reactid="153"><span class="CommunityOverview_formHeadline" data-reactid="154">Let's Connect</span><div class="OverviewFormWrapper" data-reactid="155"><form data-reactid="156"><style data-emotion-css="okj3nm">.css-okj3nm .form-row{margin:0 -5px;}.css-okj3nm .form-col{width:100%;padding:5px;}@media (min-width:480px){.css-okj3nm .form-col{width:50%;}}.css-okj3nm .form-col-fluid{width:100%;padding:5px;}.css-okj3nm label{font-weight:700;font-size:16px;color:#373736;}.css-okj3nm label .required{color:red;}.css-okj3nm textarea{height:100px !important;padding:1rem 1.5rem 0 !important;}.css-okj3nm .invalid-feedback{display:block;min-height:20px;}.css-okj3nm .form-control{padding:0 1.5rem;height:50px;}.css-okj3nm .form-control.is-invalid,.css-okj3nm .form-control.is-valid{background-image:none;}.css-okj3nm .FormSectionHeading{font-weight:700;font-size:18px;width:100%;text-transform:uppercase;padding-bottom:5px;color:#BFDDBD;border-bottom:1px solid #e8e8e8;}.css-okj3nm .Form__missingField{background-color:yellow;padding:5px;color:black;}.css-okj3nm .MultiSelect_input{width:40px;height:40px;}.css-okj3nm .MultiSelect_text{font-size:14px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-okj3nm .MultiSelect_listWrapper{position:absolute;top:40px;left:0;box-shadow:0 4px 6px 0 rgba(0,0,0,0.3);width:100%;padding:30px;background:#FFFFFF;z-index:10;height:250px;overflow-y:scroll;}@media (min-width:992px){.css-okj3nm .MultiSelect_listWrapper{height:400px;}}.css-okj3nm .Button_wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;}.css-okj3nm .MultiSelect_button{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 60px 0 20px;position:relative;cursor:pointer;text-align:left;}.css-okj3nm .MultiSelect_button::after{content:"";box-sizing:border-box;height:6px;width:6px;border-style:solid;border-color:#212121;border-width:0px 2px 2px 0px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);margin-left:15px;-webkit-transition:-webkit-transform 0.35s linear 0s;-webkit-transition:transform 0.35s linear 0s;transition:transform 0.35s linear 0s;position:absolute;right:5px;top:14px;-webkit-transition:all .3s ease;transition:all .3s ease;}.css-okj3nm .Toggle_buttonOpen .MultiSelect_button::after{top:17px;-webkit-transform:rotate(225deg);-ms-transform:rotate(225deg);transform:rotate(225deg);}.css-okj3nm .react-datepicker__input-container{border:1px solid #ced4da;}</style><div class="css-okj3nm" data-reactid="157"><div class="form-row" data-reactid="158"><div class="form-col" data-reactid="159"><label for="firstName" data-reactid="160"><!-- react-text: 161 -->First Name<!-- /react-text --><span class="required" data-reactid="162"> *</span></label><input name="firstName" class="form-control null" value="" data-reactid="163"/><div class="invalid-feedback" data-reactid="164"></div></div><div class="form-col" data-reactid="165"><label for="lastName" data-reactid="166"><!-- react-text: 167 -->Last Name<!-- /react-text --><span class="required" data-reactid="168"> *</span></label><input name="lastName" class="form-control null" value="" data-reactid="169"/><div class="invalid-feedback" data-reactid="170"></div></div><div class="form-col" data-reactid="171"><label for="email" data-reactid="172"><!-- react-text: 173 -->Email<!-- /react-text --><span class="required" data-reactid="174"> *</span></label><input name="email" class="form-control null" value="" data-reactid="175"/><div class="invalid-feedback" data-reactid="176"></div></div><div class="form-col" data-reactid="177"><label for="phone" data-reactid="178"><!-- react-text: 179 -->Phone<!-- /react-text --></label><input name="phone" class="form-control null" value="" data-reactid="180"/><div class="invalid-feedback" data-reactid="181"></div></div><div class="form-col-fluid" data-reactid="182"><label for="comments" data-reactid="183"><!-- react-text: 184 -->Comments/Questions<!-- /react-text --></label><textarea name="comments" placeholder="How can we help you?" class="form-control null" data-reactid="185"></textarea><div class="invalid-feedback" data-reactid="186"></div></div></div><div class="Button_wrapper" data-reactid="187"><button type="submit" class="btn" data-reactid="188"><!-- react-text: 189 -->Submit<!-- /react-text --><span class="ArrowButton_image" data-reactid="190"></span></button></div></div></form></div></div><style data-emotion-css="180p6ko">.css-180p6ko{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:10px;}.css-180p6ko .CTADetail_wrapper{background:#d2d2d2;width:100%;padding:10px 15px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;}.css-180p6ko .CTADetail_wrapper::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:50px;background:#E9E9E9;z-index:0;}.css-180p6ko .CTADetail_wrapper.CTADetail_wrapperAlt{background:#E9E9E9;}.css-180p6ko .CTADetail_image{width:70px;height:70px;object-fit:cover;border-radius:50%;border:4px solid #FFFFFF;z-index:2;}@media(min-width:992px){.css-180p6ko .CTADetail_image{width:90px;height:90px;}}.css-180p6ko .CTADetail_content{-webkit-flex:1;-ms-flex:1;flex:1;z-index:2;}.css-180p6ko .CTADetail_content h4{font-weight:700;font-size:16px;color:#373736;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;}@media(min-width:992px){.css-180p6ko .CTADetail_content h4{font-size:19px;}}.css-180p6ko .CTADetail_content h4 span{font-weight:400;font-size:14px;}@media (min-width:992px){.css-180p6ko .CTADetail_content h4 span{font-size:15px;}}.css-180p6ko .CTADetail_content a{font-weight:600;font-size:15px;color:#373736;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;}@media(min-width:992px){.css-180p6ko .CTADetail_content a{font-size:16px;}}.css-180p6ko .CTADetail_contentList{gap:20px;}</style><div class="css-180p6ko mt-auto" data-reactid="191"><div class="CTADetail_wrapper" data-reactid="192"><img src="https://dlqxt4mfnxo6k.cloudfront.net/silverthornehomes.com/aHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2J1aWxkZXJjbG91ZC9mZTA2NDRmMGI1MTNkMWM1NjdlMzViY2U4MjA4YmM0ZS5qcGVn/preserve/webp/1200/1200" alt="Have Questions?" class="CTADetail_image mr-3" data-reactid="193"/><div class="CTADetail_content d-flex flex-column justify-content-end" data-reactid="194"><h4 class="mb-3 d-flex flex-column" data-reactid="195"><!-- react-text: 196 -->Have Questions?<!-- /react-text --><span data-reactid="197">Call / Text</span></h4><ul class="list-unstyled d-flex m-0 CTADetail_contentList mb-2" data-reactid="198"><li data-reactid="199"><img src="/images/icon-phone-green-destination.svg" alt="Icon Phone" class="mr-2" data-reactid="200"/><a href="tel:3179535232" data-reactid="201">317-953-5232</a></li></ul></div></div></div></div></div></div></div></div></div></div><style data-emotion-css="1e2fy0l"></style><div class="css-1e2fy0l" id="photos" data-reactid="202"><div class="css-1cpq40e NoToggleDesktop" data-reactid="203"><div class="AccordionToggle_controlRef" data-reactid="204"></div><div class="DetailSection_headingWrapper" data-reactid="205"><h3 class="DetailSection_heading undefined" data-reactid="206">Photos/Videos</h3></div><div class="AccordionToggle_content AccordionToggle_contentNoToggle" data-reactid="207"><div class="AccordionToggle_contentInterior" data-reactid="208"><div class="container" data-reactid="209"><style data-emotion-css="1eud1rn">.css-1eud1rn{padding:0;margin:0;}@media (min-width:992px){.css-1eud1rn{padding:0;}}.css-1eud1rn .CarouselPhotoGallery_thumbnailsWrapper{display:block;position:relative;margin:0;}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_thumbnailsWrapper{margin:0;}}.css-1eud1rn .CarouselPhotoGallery_thumbnailsWrapper ul{list-style:none;margin:0;padding:0;white-space:nowrap;overflow-x:scroll;-webkit-scroll-behavior:smooth;-moz-scroll-behavior:smooth;-ms-scroll-behavior:smooth;scroll-behavior:smooth;}.css-1eud1rn .CarouselPhotoGallery_thumbnailItem{display:inline-block;white-space:nowrap;position:relative;margin:0;width:33.3333%;background-color:transparent;cursor:pointer;}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_thumbnailItem{margin:0 0 0 0;width:20%;}}.css-1eud1rn .CarouselPhotoGallery_thumbnailItem:focus{outline:none;}.css-1eud1rn .CarouselPhotoGallery_thumbnailItem:nth-child(3) .CarouselPhotoGallery_overlay{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_thumbnailItem:nth-child(3) .CarouselPhotoGallery_overlay{display:none;}}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_thumbnailItem:nth-child(5) .CarouselPhotoGallery_overlay{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}.css-1eud1rn .CarouselPhotoGallery_thumbnailItemBtn img{min-height:140px;object-fit:cover;}.css-1eud1rn .CarouselPhotoGallery_thumbnailItemBtn:focus{outline:none;}.css-1eud1rn .CarouselPhotoGallery_thumbnailItem:after{display:none;content:" ";top:auto;bottom:0;right:0;left:0;height:8px;position:absolute;background-color:#FFED95;z-index:1;pointer-events:none;}.css-1eud1rn .CarouselPhotoGallery_thumbnailItem:before{content:'';background-color:rgba(0,0,0,0.4);width:100%;height:100%;position:absolute;z-index:1;pointer-events:none;display:none;}.css-1eud1rn .CarouselPhotoGallery_thumbnailItem-active:after,.css-1eud1rn .CarouselPhotoGallery_thumbnailItem-active:before{display:block;}.css-1eud1rn img{width:100%;height:auto;}.css-1eud1rn .CarouselPhotoGallery_videoOverlay{display:block;position:absolute;left:0;right:0;top:0;bottom:0;background-image:url('/images/icon-play-button-white.svg');background-size:45px 45px;background-color:rgba(57,57,57,0.8);background-position:center center;background-repeat:no-repeat;}.css-1eud1rn .CarouselPhotoGallery_tourOverlay{display:block;position:absolute;left:0;right:0;top:0;bottom:0;background-color:rgba(0,0,0,0.8);background-image:url('/images/icon-tour-white.svg');background-position:center center;background-size:auto 34px;background-repeat:no-repeat;}.css-1eud1rn .CarouselPhotoGallery_overlay{position:absolute;left:0;right:0;top:0;bottom:0;background-color:rgba(0,0,0,0.7);font-weight:700;font-size:13px;color:#FFFFFF;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;display:none;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-animation:fadeIn .3s;animation:fadeIn .3s;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_overlay{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;font-size:16px;-webkit-letter-spacing:1.07px;-moz-letter-spacing:1.07px;-ms-letter-spacing:1.07px;letter-spacing:1.07px;}}.css-1eud1rn .CarouselPhotoGallery_overlay img{width:20px !important;height:20px !important;margin:0 0 5px;min-height:unset;}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_overlay img{width:30px !important;height:30px !important;margin:0 8px 0 0;}}@-webkit-keyframes fadeIn{from{opacity:0;}to{opacity:1;}}@keyframes fadeIn{from{opacity:0;}to{opacity:1;}}@-webkit-keyframes fadeOut{0%{opacity:1;}100%{opacity:0;}}@keyframes fadeOut{0%{opacity:1;}100%{opacity:0;}}.css-1eud1rn .CarouselPhotoGallery_overlayAlt{-webkit-animation:fadeOut 0.5s forwards;animation:fadeOut 0.5s forwards;}.css-1eud1rn .CarouselPhotoGallery_image{position:relative;aspect-ratio:16/9;position:relative;min-height:350px;}@media(min-width:768px){}@media(min-width:992px){}@media(min-width:1600px){.css-1eud1rn .CarouselPhotoGallery_image{overflow:hidden;}}.css-1eud1rn .CarouselPhotoGallery_image img{position:absolute;left:0;right:0;top:0;bottom:0;height:100%;object-fit:cover;}.css-1eud1rn .CarouselPhotoGallery_image .CarouselPhotoGallery_imageElement{position:absolute;left:0;right:0;top:0;bottom:0;z-index:2;margin:0;padding:0;width:100%;}.css-1eud1rn .CarouselPhotoGallery_image iframe{position:relative;width:100%;height:100%;}.css-1eud1rn .CarouselPhotoGallery_imageButtonLeft,.css-1eud1rn .CarouselPhotoGallery_imageButtonRight{position:absolute;display:block;top:40%;width:25px;height:25px;background-size:25px 25px;background-position:center center;background-repeat:no-repeat;z-index:2;cursor:pointer;}@media (min-width:992px){.css-1eud1rn .CarouselPhotoGallery_imageButtonLeft,.css-1eud1rn .CarouselPhotoGallery_imageButtonRight{top:45%;width:42px;height:42px;background-size:42px 42px;}}.css-1eud1rn .CarouselPhotoGallery_imageButtonLeft:focus,.css-1eud1rn .CarouselPhotoGallery_imageButtonRight:focus{outline:none;}.css-1eud1rn .CarouselPhotoGallery_imageButtonLeft{background-image:url('/images/icon-arrow-left-white-shadow.svg');left:20px;}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_imageButtonLeft{left:40px;}}.css-1eud1rn .CarouselPhotoGallery_imageButtonRight{background-image:url('/images/icon-arrow-right-white-shadow.svg');right:20px;}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_imageButtonRight{right:40px;}}.css-1eud1rn .CarouselPhotoGallery_imageEnlarge{position:absolute;display:block;width:28px;height:28px;right:0;bottom:0;cursor:pointer;z-index:2;background-color:rgba(0,0,0,0.8);}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_imageEnlarge{width:55px;height:55px;}}.css-1eud1rn .CarouselPhotoGallery_imageEnlarge::before{content:'';background-image:url('/images/icon-expand-white.svg');background-size:contain;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:13px;height:13px;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_imageEnlarge::before{width:26px;height:26px;}}.css-1eud1rn .CarouselPhotoGallery_h2Wrapper{position:absolute;left:0;bottom:0;width:100%;height:-webkit-max-content;height:-moz-max-content;height:max-content;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding:70px;z-index:10;}.css-1eud1rn .CarouselPhotoGallery_h2{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-weight:700;font-size:45px;color:#FFFFFF;-webkit-letter-spacing:1.04px;-moz-letter-spacing:1.04px;-ms-letter-spacing:1.04px;letter-spacing:1.04px;text-shadow:0 4px 17px rgba(0,0,0,0.24);text-transform:uppercase;}.css-1eud1rn .CarouselPhotoGallery_h2 span{font-weight:500;font-size:20px;color:#FFFFFF;-webkit-letter-spacing:2px;-moz-letter-spacing:2px;-ms-letter-spacing:2px;letter-spacing:2px;}.css-1eud1rn .CarouselPhotoGallery_h2Lead{font-weight:500;font-size:20px;color:#FFFFFF;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;font-style:italic;}.css-1eud1rn .CarouselPhotoGallery_contactWrapper{position:absolute;right:0;bottom:0;z-index:100;}@media(min-width:992px){.css-1eud1rn .CarouselPhotoGallery_contactWrapper{bottom:70px;right:65px;}}.css-1eud1rn .CarouselPhotoGallery_contactWrapper .ContactModal_wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.css-1eud1rn .CarouselPhotoGallery_contactWrapper .ContactModal_btn{font-weight:800;font-size:14px;color:#FFFFFF;background:#FFED95;text-transform:uppercase;-webkit-letter-spacing:0.78px;-moz-letter-spacing:0.78px;-ms-letter-spacing:0.78px;letter-spacing:0.78px;text-align:center;padding:13px 25px;}@media (min-width:992px){.css-1eud1rn .CarouselPhotoGallery_contactWrapper .ContactModal_btn{padding:20px 35px;font-size:18px;-webkit-letter-spacing:1px;-moz-letter-spacing:1px;-ms-letter-spacing:1px;letter-spacing:1px;-webkit-transition:all .3s ease;transition:all .3s ease;}.css-1eud1rn .CarouselPhotoGallery_contactWrapper .ContactModal_btn:hover{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05);}}.css-1eud1rn .CarouselPhotoGallery_contactWrapperDestination .ContactModal_btn{background:#00AF98;}.css-1eud1rn .CarouselPhotoGallery_thumbnailItem-activeDestination::after{background:#00AF98;}.css-1eud1rn .CarouselPhotoGallery_banner{font-weight:700;font-size:12px;color:#FFFFFF;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-align:center;padding:7px 15px;margin:0 0 10px;width:-webkit-max-content;width:-moz-max-content;width:max-content;text-transform:uppercase;}</style><div class="css-1eud1rn" id="top" data-reactid="210"><div class="CarouselPhotoGallery_image" data-reactid="211"><img src="https://dlqxt4mfnxo6k.cloudfront.net/silverthornehomes.com/aHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2J1aWxkZXJjbG91ZC9mNzcxODkxYWJhNjg1OGMzZTYzOWZiMmEwOTM2Zjg0Ni5qcGVn/exact/webp/2000/1125" alt="" data-reactid="212"/></div></div></div></div></div></div></div><style data-emotion-css="143ljs0">.css-143ljs0 .CommunityInteractive_iframe{width:100%;aspect-ratio:3 / 2;border:0;min-height:500px;}@media(min-width:992px){.css-143ljs0 .CommunityInteractive_iframe{aspect-ratio:none;min-height:unset;max-height:900px;}}</style><div class="css-143ljs0" data-reactid="213"><div class="DetailSection" data-reactid="214"><div class="ScrollTarget" id="interactive-map" data-reactid="215"></div><div class="css-1cpq40e NoToggleDesktop" data-reactid="216"><div class="AccordionToggle_controlRef" data-reactid="217"></div><div class="DetailSection_headingWrapper" data-reactid="218"><h3 class="DetailSection_heading undefined" data-reactid="219">Interactive Map</h3></div><div class="AccordionToggle_content AccordionToggle_contentNoToggle" data-reactid="220"><div class="AccordionToggle_contentInterior" data-reactid="221"><div class="container" data-reactid="222"><div class="row" data-reactid="223"><iframe src="https://arbor.communitymap.bimaire.app/?c=381" title="Intaractive Map for Haven Ponds" class="CommunityInteractive_iframe" data-reactid="224"></iframe></div></div></div></div></div></div></div><style data-emotion-css="1eh1jed">.css-1eh1jed{position:relative;}@media (min-width:992px){.css-1eh1jed{padding:60px 0;}}.css-1eh1jed .DetailSection_floorPlanImage{width:100%;max-width:300px;}@media (min-width:768px){.css-1eh1jed .DetailSection_floorPlanImage{max-width:400px;}}.css-1eh1jed .DetailSection_contentItem{cursor:pointer;}</style><div class="css-1eh1jed" data-reactid="225"><div class="DetailSection" data-reactid="226"><div class="ScrollTarget" id="floorplan" data-reactid="227"></div><div class="css-1cpq40e NoToggleDesktop" data-reactid="228"><div class="AccordionToggle_controlRef" data-reactid="229"></div><div class="DetailSection_headingWrapper" data-reactid="230"><h3 class="DetailSection_heading undefined" data-reactid="231">Floor Plans</h3></div><div class="AccordionToggle_content AccordionToggle_contentNoToggle" data-reactid="232"><div class="AccordionToggle_contentInterior" data-reactid="233"><div class="DetailSection_content" data-reactid="234"><div class="container" data-reactid="235"><style data-emotion-css="0"></style><div class="css-0" data-reactid="236"><div class="row justify-content-center" data-reactid="237"><div class="DetailSection_contentItem d-flex flex-column align-items-center justify-content-between m-3 mb-5 pb-3" data-reactid="238"><img src="https://dlqxt4mfnxo6k.cloudfront.net/silverthornehomes.com/aHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2J1aWxkZXJjbG91ZC85YmIwNzhlMDQ4MmJiZDgyOTY0YWEzZTQ0ZjQzMDliYy5wbmc=/webp/1200/1200" alt="" class="DetailSection_floorPlanImage" data-index="0" data-reactid="239"/><span class="btn btn-brand2 mt-4" data-reactid="240"><!-- react-text: 241 -->Expand Image<!-- /react-text --><img src="/images/icon-plus-white.svg" alt="Icon Plus" class="ml-2" data-reactid="242"/></span></div><div class="DetailSection_contentItem d-flex flex-column align-items-center justify-content-between m-3 mb-5 pb-3" data-reactid="243"><img src="https://dlqxt4mfnxo6k.cloudfront.net/silverthornehomes.com/aHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2J1aWxkZXJjbG91ZC85YzM2ODFkYjg0NjljZjFkM2Q3ZmNkZWEwMjYzYTJhMi5wbmc=/webp/1200/1200" alt="" class="DetailSection_floorPlanImage" data-index="1" data-reactid="244"/><span class="btn btn-brand2 mt-4" data-reactid="245"><!-- react-text: 246 -->Expand Image<!-- /react-text --><img src="/images/icon-plus-white.svg" alt="Icon Plus" class="ml-2" data-reactid="247"/></span></div></div></div></div></div></div></div></div></div></div><style data-emotion-css="1qn8sdt">.css-1qn8sdt{position:relative;}@media (min-width:992px){.css-1qn8sdt{padding:45px 0;}}</style><div class="css-1qn8sdt" data-reactid="248"><div class="ScrollTarget" id="directions" data-reactid="249"></div><div class="css-1cpq40e NoToggleDesktop" data-reactid="250"><div class="AccordionToggle_controlRef" data-reactid="251"></div><div class="DetailSection_headingWrapper" data-reactid="252"><h3 class="DetailSection_heading undefined" data-reactid="253">Map & Directions</h3></div><div class="AccordionToggle_content AccordionToggle_contentNoToggle" data-reactid="254"><div class="AccordionToggle_contentInterior" data-reactid="255"><div class="container pb-5" data-reactid="256"><div class="row pb-5" data-reactid="257"><div class="col-lg-6" data-reactid="258"><style data-emotion-css="170hn72">.css-170hn72{position:relative;padding-bottom:56.25%;width:100%;z-index:0;background-color:#F4F4F4;}.css-170hn72 .leaflet-container{width:100%;height:100%;}.css-170hn72 .gm-style iframe{width:0px !important;height:0px !important;}.css-170hn72 .leaflet-container{position:absolute;top:0;bottom:0;left:0;right:0;}</style><div class="css-170hn72" data-reactid="259"><!-- react-empty: 260 --></div></div><div class="col-lg-6" data-reactid="261"><a href="https://www.google.com/maps/place/39.926733,-85.89752/@39.926733,-85.89752,18z" target="_blank" rel="noopener noreferrer" class="btn btn-hollow" data-reactid="262">Google Map</a></div></div></div></div></div></div></div><div class="css-1qn8sdt" data-reactid="263"><div class="ScrollTarget" id="tour" data-reactid="264"></div><div class="css-1cpq40e NoToggleDesktop" data-reactid="265"><div class="AccordionToggle_controlRef" data-reactid="266"></div><div class="DetailSection_headingWrapper" data-reactid="267"><h3 class="DetailSection_heading undefined" data-reactid="268">Virtual Tour</h3></div><div class="AccordionToggle_content AccordionToggle_contentNoToggle" data-reactid="269"><div class="AccordionToggle_contentInterior" data-reactid="270"><div class="container" data-reactid="271"><div class="col-12 p-0 mx-auto" data-reactid="272"><div class="embed-responsive embed-responsive-16by9 m-md-3" data-reactid="273"><iframe src="https://my.matterport.com/show/?m=2xkSfeQyJJL" width="640" height="360" frameborder="0" allowfullscreen="" title="Tour for Van Buren" data-reactid="274"></iframe></div></div></div></div></div></div></div><style data-emotion-css="187pemn">@media (min-width:992px){.css-187pemn{padding:45px 0;}}</style><div class="css-187pemn" data-reactid="275"><div class="ScrollTarget" id="calculator" data-reactid="276"></div><div class="css-1cpq40e NoToggleDesktop" data-reactid="277"><div class="AccordionToggle_controlRef" data-reactid="278"></div><div class="DetailSection_headingWrapper" data-reactid="279"><h3 class="DetailSection_heading undefined" data-reactid="280">Mortgage Calculator</h3></div><div class="AccordionToggle_content AccordionToggle_contentNoToggle" data-reactid="281"><div class="AccordionToggle_contentInterior" data-reactid="282"><div class="container" data-reactid="283"><div class="col-lg-8 mx-auto" data-reactid="284"><style data-emotion-css="6n5yf0">.css-6n5yf0 .MortgageCalculator_wrapper{gap:20px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}@media (min-width:992px){.css-6n5yf0 .MortgageCalculator_wrapper{gap:10px;}}.css-6n5yf0 label{text-transform:uppercase;-webkit-letter-spacing:1.2px;-moz-letter-spacing:1.2px;-ms-letter-spacing:1.2px;letter-spacing:1.2px;font-weight:600;color:#373736;}.css-6n5yf0 .form-row{margin:0;width:100%;}@media (min-width:992px){.css-6n5yf0 .form-row{width:calc(50% - 5px);}}.css-6n5yf0 .form-group{margin:0;width:100%;}@media (min-width:992px){.css-6n5yf0 .form-group{width:calc(50% - 5px);}}.css-6n5yf0 p{font-weight:400;font-size:16px;color:#3A3C3D;-webkit-letter-spacing:0.15px;-moz-letter-spacing:0.15px;-ms-letter-spacing:0.15px;letter-spacing:0.15px;line-height:29px;margin-bottom:20px;}@media(min-width:992px){.css-6n5yf0 p{font-size:18px;-webkit-letter-spacing:0.16px;-moz-letter-spacing:0.16px;-ms-letter-spacing:0.16px;letter-spacing:0.16px;line-height:37px;}}.css-6n5yf0 .MortgageCalculator_disclaimer p{font-size:.65rem;line-height:.9rem;color:#4F4F4F;}@media(min-width:992px){.css-6n5yf0 .MortgageCalculator_disclaimer p{font-size:.7rem;line-height:1.05rem;}}.css-6n5yf0 .MortgageCalculator_disclaimer p a{color:#84c9b7;}</style><div class="css-6n5yf0" data-reactid="285"><div class="MortgageCalculator" data-reactid="286"><div class="MortgageCalculator_wrapper" data-reactid="287"><div class="form-group price" data-reactid="288"><label for="price" data-reactid="289">New Home Price</label><div class="input-group" data-reactid="290"><div class="input-group-prepend" data-reactid="291"><span class="input-group-text" data-reactid="292">$</span></div><input type="number" name="price" class="form-control" value="482995" data-reactid="293"/></div></div><div class="form-row down-payment" data-reactid="294"><label for="downPayment" data-reactid="295">Down Payment</label><div class="input-group" data-reactid="296"><div class="input-group-prepend" data-reactid="297"><span class="input-group-text" data-reactid="298">$</span></div><input type="number" value="96599" name="downPayment" class="form-control" data-input="downPayment" data-reactid="299"/></div></div><div class="form-row interest-rate" data-reactid="300"><label for="rate" data-reactid="301">Interest Rate</label><div class="input-group" data-reactid="302"><div class="input-group-prepend" data-reactid="303"><span class="input-group-text" data-reactid="304">%</span></div><input type="number" value="5.99" name="rate" class="form-control" data-reactid="305"/></div></div><div class="form-group loan-type" data-reactid="306"><label for="years" data-reactid="307">Loan Type</label><select name="years" class="form-control" data-reactid="308"><option value="30" data-reactid="309">30-year fixed</option><option value="25" data-reactid="310">25-year fixed</option><option value="20" data-reactid="311">20-year fixed</option><option value="15" data-reactid="312">15-year fixed</option><option value="10" data-reactid="313">10-year fixed</option><option value="5" data-reactid="314">5-year fixed</option><option value="31" data-reactid="315">5/1 ARM</option></select></div></div><hr class="mt-4 mb-2" data-reactid="316"/><div class="" data-reactid="317"><p class="mb-2" data-reactid="318"><small data-reactid="319">Estimated Payment:</small></p><h3 class="" data-reactid="320"><!-- react-text: 321 -->$2,314.16<!-- /react-text --><small data-reactid="322">/mo</small></h3></div><div class="d-flex justify-content-center align-items-center" data-reactid="323"><div class="MortgageCalculator_disclaimer" data-reactid="324"><p>Results received form this calculator are NOT a loan offer and are only an estimated payment based off of principal and interest only. Additional fees such as HOA dues and property taxes are not included in calculations. Silverthorne Homes, the seller, is not a lender and does not offer financing and is not responsible for any errors, omissions, or misrepresentations. Actual available loans depend on a number of factors, including lender and loan type. The above calculator and any related information provided are an example of mortgage payments calculated for comparative and educational purposes only. The results generated cannot be used to determine loan terms, costs or pre-qualify for any actual mortgage loan program. The sample results above may not be available to you for financing purposes, or take into account all loan options and important considerations for home buying and financing decisions. <a href="/privacy-policy" target><b>View Terms and Privacy Policy.</b><br /></a><br /><br /></p></div></div></div></div></div></div></div></div></div></div><style data-emotion-css="ef2bii">.css-ef2bii{width:100%;background-image:url('/images/marble-bg.jpg');background-position:center center;background-size:cover;padding:70px 0;}.css-ef2bii .CtaBanner_lead{font-family:ingra-condensed,serif;color:#FFFFFF;}@media (min-width:768px){}.css-ef2bii .CtaBanner_lead p{font-family:ingra-condensed,serif;font-size:31px;color:#FFFFFF;font-weight:300;text-transform:uppercase;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-align:center;padding:0;margin:0 0 25px 0;line-height:1;}@media (min-width:768px){.css-ef2bii .CtaBanner_lead p{text-align:left;font-size:45px;margin:0;}}@media (min-width:992px){.css-ef2bii .CtaBanner_lead p{font-size:55px;}}</style><div class="css-ef2bii" data-reactid="325"><div class="container container-sm" data-reactid="326"><div class="d-md-flex align-items-center justify-content-center" data-reactid="327"><div class="CtaBanner_lead" data-reactid="328"><p>Find <b>your<br />new home!</b><br /></p></div><div class="d-flex flex-wrap flex-gap" data-reactid="329"><div class="mx-auto ml-lg-5" data-reactid="330"><div class="buttonSet" data-reactid="331"><style data-emotion-css="36i3yu">.css-36i3yu{margin-bottom:15px;}.css-36i3yu .buttonSet__container{margin:0 -2px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}.css-36i3yu .buttonSet__container.left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}.css-36i3yu .buttonSet__container.center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}.css-36i3yu .buttonSet__container.right{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;}.css-36i3yu .buttonSet__container.stacked{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}.css-36i3yu .buttonSet__container.stacked .buttonSet__containerColumn{width:100% !important;}.css-36i3yu .buttonSet__container.stacked .btn{width:100% !important;}.css-36i3yu .buttonSet__containerColumn{padding:2px;width:100%;}@media (min-width:992px){.css-36i3yu .buttonSet__containerColumn{width:auto;}}.css-36i3yu .buttonSet__containerColumn .btn{width:100%;}@media (min-width:480px){.css-36i3yu .buttonSet__containerColumn .btn{width:auto;}}.css-36i3yu .btn-arrow-green::after{background-image:url(/images/icon-button-arrow-right-green.svg);}.css-36i3yu .btn-arrow-green::after:hover{background-image:url(/images/icon-button-arrow-right-green.svg);}</style><div class="css-36i3yu" data-reactid="332"><ul class="list-unstyled buttonSet__container undefined" data-reactid="333"><li class="buttonSet__containerColumn" data-reactid="334"><div class="ContactModal_wrapper" data-reactid="335"><span role="button" tabindex="0" class="ContactModal_btn btn btn-brand3" data-reactid="336">Start Building</span><!-- react-empty: 337 --></div></li></ul></div></div></div></div></div></div></div></div></div><!-- react-empty: 338 --><!-- react-empty: 339 --><style data-emotion-css="1he0pk2">.css-1he0pk2{margin:0 0 47px;}@media (min-width:992px){.css-1he0pk2{margin:0;}}.css-1he0pk2 .Footer_nav{display:none;}@media (min-width:992px){.css-1he0pk2 .Footer_nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}}.css-1he0pk2 .Footer_nav .Footer_navMenuHeading{font-weight:700;font-family:ingra-condensed,serif;padding:0 0 40px 0;}.css-1he0pk2 .Footer_nav .Footer_navMenu{display:none;padding:0 20px;margin:0;list-style:none;}@media (min-width:992px){.css-1he0pk2 .Footer_nav .Footer_navMenu{display:block;padding:0 40px 0 0;}.css-1he0pk2 .Footer_nav .Footer_navMenu .Footer_navMenuItem{font-weight:700;font-family:ingra-condensed,serif;}.css-1he0pk2 .Footer_nav .Footer_navMenu .Footer_navMenuItem a{font-weight:400;}}.css-1he0pk2 .Footer_menuWrapper{display:none;}@media (min-width:992px){.css-1he0pk2 .Footer_menuWrapper{display:block;}}.css-1he0pk2 .Footer_menuWrapper .Footer_nav{padding:0;gap:50px;}.css-1he0pk2 .Footer_menuWrapper .Footer_navMenu{padding:0;}.css-1he0pk2 .Footer_menuWrapper .Footer_navMenuHeading{font-weight:800;font-size:18px;color:#373736;-webkit-letter-spacing:0.47px;-moz-letter-spacing:0.47px;-ms-letter-spacing:0.47px;letter-spacing:0.47px;text-transform:uppercase;}.css-1he0pk2 .Footer_menuWrapper .Footer_navMenuItem{font-size:16px;color:#373736;-webkit-letter-spacing:0.25px;-moz-letter-spacing:0.25px;-ms-letter-spacing:0.25px;letter-spacing:0.25px;line-height:25px;text-transform:uppercase;-webkit-transform:all .3s ease;-ms-transform:all .3s ease;transform:all .3s ease;}.css-1he0pk2 .Footer_menuWrapper .Footer_navMenuItem a{color:#4e4e4d;}.css-1he0pk2 .Footer_menuWrapper .Footer_navMenuItem:hover{color:#373736;}.css-1he0pk2 .Footer_socialWrapper{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;border-radius:3px;}.css-1he0pk2 .Footer_socialWrapper .Footer_social{margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;gap:10px;}.css-1he0pk2 .Footer_socialWrapper .Footer_social li{display:inline-block;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:column wrap;-ms-flex-flow:column wrap;flex-flow:column wrap;-webkit-transition:all .3s ease;transition:all .3s ease;}.css-1he0pk2 .Footer_socialWrapper .Footer_social li a img{height:29px;width:auto;-webkit-transition:all .3s ease;transition:all .3s ease;}.css-1he0pk2 .Footer_socialWrapper .Footer_social li:hover img{-webkit-transform:scale(1.12);-ms-transform:scale(1.12);transform:scale(1.12);}.css-1he0pk2 .Footer_logos{margin:0;padding:0;gap:25px;}.css-1he0pk2 .Footer_logos li,.css-1he0pk2 .Footer_logos a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:all .3s ease;transition:all .3s ease;}.css-1he0pk2 .Footer_logos li:hover,.css-1he0pk2 .Footer_logos a:hover{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03);}.css-1he0pk2 .Footer_logos li img,.css-1he0pk2 .Footer_logos a img{height:51px;width:auto;}.css-1he0pk2 .Footer_policyWrapper{background:#F4F4F4;padding:30px 0 90px 0;}.css-1he0pk2 .Footer_policyMenu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0;margin:0;}@media (min-width:992px){.css-1he0pk2 .Footer_policyMenu{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:15px;}}.css-1he0pk2 .Footer_policyMenu .Footer_policyMenuItem{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;}.css-1he0pk2 .Footer_policyMenu .Footer_policyMenuItem a{font-weight:600;font-size:13px;color:#373736;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-align:center;line-height:26px;}.css-1he0pk2 .Footer_policyBuilder,.css-1he0pk2 .Footer_cookieButton{font-weight:600 !important;font-size:13px;color:#373736 !important;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-align:center;line-height:26px;}.css-1he0pk2 .Footer_credit{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;font-weight:600 !important;font-size:13px;color:#373736 !important;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-align:center;line-height:26px;}.css-1he0pk2 .Footer_credit a{font-size:13px;color:#373736 !important;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;text-align:center;line-height:26px;}.css-1he0pk2 .Footer_policySection{gap:20px;}.css-1he0pk2 .Footer_logoImage{height:35px;width:auto;-webkit-filter:invert(1);filter:invert(1);opacity:.25;}@media (min-width:992px){.css-1he0pk2 .Footer_logoImage{height:45px;}}.css-1he0pk2 .Disclaimer p{font-size:13px;line-height:1;opacity:.6;max-width:900px;text-align:center;}@media (min-width:992px){.css-1he0pk2 .Disclaimer p{text-align:left;line-height:1.4;}}.css-1he0pk2 .Disclaimer p a{color:#373736 !important;}.css-1he0pk2 .Disclaimer div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:40px;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}@media (min-width:992px){.css-1he0pk2 .Disclaimer div{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}}.css-1he0pk2 .google-link img{height:26px !important;}@media (max-width:992px){.css-1he0pk2 .mobileWrapper{position:relative;z-index:9000;}}</style><footer class="css-1he0pk2" data-reactid="340"><div class="container mobileWrapper" data-reactid="341"><div class="d-flex justify-content-center justify-content-lg-between py-3 py-lg-5 mb-lg-2" data-reactid="342"><section class="Footer_menuWrapper" data-reactid="343"><div class="container" data-reactid="344"><div data-reactid="345"><div class="Footer_nav" data-reactid="346"></div></div></div></section><section class="Footer_socialWrapper" data-reactid="347"><div class="d-lg-flex align-items-center" data-reactid="348"><ul class="list-unstyled Footer_social justify-content-center" data-reactid="349"><li data-reactid="350"><a href="https://www.facebook.com/silverthornehomes" target="_blank" rel="noopener noreferrer" data-reactid="351"><img src="/images/icon-social-facebook.svg" alt="Facebook" data-reactid="352"/></a></li><li data-reactid="353"><a href="https://www.linkedin.com/company/yourarborhome/" target="_blank" rel="noopener noreferrer" data-reactid="354"><img src="/images/icon-social-linkedin.svg" alt="Linkedin" data-reactid="355"/></a></li><li data-reactid="356"><a href="https://www.instagram.com/silverthornehomes/" target="_blank" rel="noopener noreferrer" data-reactid="357"><img src="/images/icon-social-instagram.svg" alt="Instagram" data-reactid="358"/></a></li><li class="google-link" data-reactid="359"><a href="https://www.google.com/maps/place/Silverthorne+Homes+LLC/@39.8526583,-86.0053588,15z/data=!4m2!3m1!1s0x0:0xf55454e4a626cebb?sa=X&ved=2ahUKEwiB66_bgvbhAhVHba0KHfUJA8AQ_BIwDnoECAgQCA" target="_blank" rel="noopener noreferrer" data-reactid="360"><img src="/images/icon-footer-google.svg" alt="Google Maps" class="GoogleMaps_Icon" data-reactid="361"/></a></li></ul></div></section></div></div><section class="Footer_policyWrapper" data-reactid="362"><div class="container" data-reactid="363"><div class="d-flex flex-column align-items-center align-items-lg-start" data-reactid="364"><div class="d-lg-flex align-items-center Footer_policySection mb-4" data-reactid="365"><div class="d-flex d-lg-none flex-column align-items-center" data-reactid="366"><a class="d-flex justify-content-center mt-3 mt-lg-0 Footer_policyBuilder" href="/" data-reactid="367"><!-- react-text: 368 -->©<!-- /react-text --><!-- react-text: 369 -->2026<!-- /react-text --><!-- react-text: 370 --> <!-- /react-text --><!-- react-text: 371 -->Silverthorne Homes<!-- /react-text --></a><span class="Footer_credit" data-reactid="372"><!-- react-text: 373 -->Site By <!-- /react-text --><a href="https://www.builderdesigns.com" target="_blank" rel="noopener noreferrer" data-reactid="374">Builder Designs</a></span><span class="Footer_cookieButton" role="button" tabindex="0" data-reactid="375">Do Not Sell or Share My Personal Information</span></div><div class="d-lg-flex" data-reactid="376"><a class="d-none d-lg-flex justify-content-center mt-3 mt-lg-0 mr-3 Footer_policyBuilder" href="/" data-reactid="377"><!-- react-text: 378 -->©<!-- /react-text --><!-- react-text: 379 -->2026<!-- /react-text --><!-- react-text: 380 --> <!-- /react-text --><!-- react-text: 381 -->Silverthorne Homes<!-- /react-text --></a><span class="d-none d-lg-flex mr-3 Footer_cookieButton" role="button" tabindex="0" data-reactid="382">Do Not Sell or Share My Personal Information</span><div data-reactid="383"><div class="Footer_policy" data-reactid="384"></div></div><span class="d-none d-lg-inline Footer_credit ml-3" data-reactid="385"><!-- react-text: 386 -->Site By <!-- /react-text --><a href="https://www.builderdesigns.com" target="_blank" rel="noopener noreferrer" data-reactid="387">Builder Designs</a></span></div></div><div class="Disclaimer" data-reactid="388"><p>Prices, plans, and terms are effective on the date of publication and subject to change without notice. Square footage shown is only an estimate and actual square footage will differ. Depictions of homes or other features are artist conceptions. Hardscape, landscape, and other items shown may be decorator suggestions that are not included in the purchase price and availability may vary. Plans to build out this neighborhood as proposed are subject to change without notice. 3D floor plan rendering is for illustrative purposes only and represents a concept of a standard model of this home and may not represent the home that would be available for purchase at the purchase price shown. The rendering may represent the base model of this home without any options or upgrades, or may depict options, upgrades or features that are available at an additional cost. Furniture placement and flooring is artist's conception and is not intended to show specific detailing. Floor plans are the property of Silverthorne Homes.<br /></p><div> <p><a href="/neighborhoods/indiana" target><b>NEW CONSTRUCTION HOMES IN INDIANA<br /></b></a>New <a href="/neighborhoods/indianapolis" target>Homes for Sale in Indianapolis<br /> </a>New <a href="/neighborhoods/mccordsville" target>Homes for Sale in McCordsville<br /> </a>New <a href="/neighborhoods/greenwood" target>Homes for Sale in Greenwood<br /> </a>New <a href="/neighborhoods/westfield" target>Homes for Sale in Westfield<br /> </a>New <a href="/neighborhoods/new-palestine" target>Homes for Sale in New Palestine</a><br /> </p> <p><a href="/homes" target><b>AVAILABLE MOVE-IN READY HOMES<br /> </b></a><a href="/homes/indiana/indianapolis" target>Available Homes for Sale in Indianapolis <br /> </a><a href="/homes/indiana/greenwood" target>Available Homes for Sale in Greenwood<br /> </a><a href="/homes/indiana/west-lafayette" target>Available Homes for Sale in West Lafayette</a></p></div></div><ul class="d-flex list-unstyled p-0 m-0 Footer_policySection" data-reactid="389"><li data-reactid="390"><a href="https://www.hud.gov/" target="_blank" rel="noopener noreferrer" data-reactid="391"><img src="https://s3.amazonaws.com/buildercloud/181d107d7124d19d443c6199df6f7961.png" alt="Logo #000" class="Footer_logoImage" data-reactid="392"/></a></li><li data-reactid="393"><a href="https://directory.bagi.com/directory/details/silverthorne-homes-786588" target="_blank" rel="noopener noreferrer" data-reactid="394"><img src="https://s3.amazonaws.com/buildercloud/631fa0489a674b16225b28f528dc353c.png" alt="Logo #001" class="Footer_logoImage" data-reactid="395"/></a></li><li data-reactid="396"><a href="https://www.bbb.org/us/in/indianapolis/profile/home-builders/silverthorne-homes-llc-0382-32004720" target="_blank" rel="noopener noreferrer" data-reactid="397"><img src="https://s3.amazonaws.com/buildercloud/d3541abd644a99901cf776263cb4caed.png" alt="Logo #002" class="Footer_logoImage" data-reactid="398"/></a></li></ul></div></div></section><style data-emotion-css="q03qdy">.css-q03qdy{position:fixed;left:0;bottom:0;height:47px;width:100%;background-color:#FFFFFF;z-index:100;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0 90px 0 0;box-shadow:0 -3px 7px 0 rgba(0,0,0,0.06);}@media (min-width:992px){.css-q03qdy{display:none;}}.css-q03qdy .OSCTag_image{width:36px;height:36px;border-radius:50%;object-fit:cover;margin:0 0 0 20px;display:none;}@media (min-width:410px){.css-q03qdy .OSCTag_image{display:block;}}.css-q03qdy .OSCTag_titleWrapper{-webkit-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-q03qdy .OSCTag_title{font-weight:900;font-size:16px;color:#439374;font-family:ingra-condensed,serif;text-transform:uppercase;-webkit-letter-spacing:0.53px;-moz-letter-spacing:0.53px;-ms-letter-spacing:0.53px;letter-spacing:0.53px;text-align:center;line-height:22px;margin:0 20px;}.css-q03qdy .OSCTag_links{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0;margin:0;}.css-q03qdy .OSCTag_links li{width:47px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}.css-q03qdy .OSCTag_links li a{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}.css-q03qdy .OSCTag_links li a img{width:-webkit-max-content;width:-moz-max-content;width:max-content;}.css-q03qdy .ContactModal_wrapper{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.css-q03qdy .ContactModal_btn{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}.css-q03qdy .OSCTag_linksEmail{background:#79C4B1;}.css-q03qdy .OSCTag_linksText{background:#BFDDBD;}.css-q03qdy .OSCTag_linksPhone{background:#439374;}</style><div class="css-q03qdy" data-reactid="399"><div class="OSCTag_titleWrapper" data-reactid="400"><img src="https://dlqxt4mfnxo6k.cloudfront.net/silverthornehomes.com/aHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2J1aWxkZXJjbG91ZC9mZTA2NDRmMGI1MTNkMWM1NjdlMzViY2U4MjA4YmM0ZS5qcGVn/preserve/webp/1200/1200" alt="Have Questions?" class="OSCTag_image" data-reactid="401"/><h4 class="OSCTag_title" data-reactid="402">Contact Us</h4></div><ul class="OSCTag_links list-unstyled" data-reactid="403"><li class="OSCTag_linksEmail" data-reactid="404"><div class="ContactModal_wrapper" data-reactid="405"><span role="button" tabindex="0" class="ContactModal_btn " data-reactid="406"><img src="/images/icon-email-white.svg" alt="email icon" data-reactid="407"/></span><!-- react-empty: 408 --></div></li><li class="OSCTag_linksPhone" data-reactid="409"><a href="tel:3179535232" data-reactid="410"><img src="/images/icon-phone-white.svg" alt="phone icon" data-reactid="411"/></a></li></ul></div></footer><!-- react-empty: 412 --></div></div><!-- react-empty: 413 --></div></div><script>window.__PRELOADED_STATE__ = {"compare":{},"favorites":{"items":[],"fetched":false,"isFetching":false},"hoaPortal":{"fetched":false},"user":{"token":null,"user":null,"loginError":null,"isFetching":false},"filters":{"AreaMetro":[{"label":"Indiana","value":{"zillowMlsIdentifier":null,"name":"Indiana","parentMetro":"Indiana Area","crm":{"hubspot":{"fields":[]}},"default_area":true,"state":"Indiana","market_promotion_banner":[{"button_label":"LEARN MORE","copy":"As low as 4.99%* on FHA Loans in Select Communities w/Silverton Mortgage","_id":"c9327ce810cb4a72","button_url":"https://silverthornehomes.com/indiana-incentives","title":"Special Financing Available"}],"logo":{"contentUrl":"https://s3.amazonaws.com/buildercloud/0084755b2c627e403933c754beb651fe.jpeg","@type":"ImageObject","name":"Arbor Homes - Indianapolis"},"_id":"og0gef","isMetro":true,"description":"\u003cp>Welcome home to the Hoosier State! We at Silverthorne Homes are dedicated to simplifying the process of homeownership. As one of the region’s top home builders, Silverthorne stands for quality. We build each home entirely on-site, one piece at a time. Using name brand components and the best quality materials, we create each customer a one-of-a-kind home in a beautiful community.\u003cbr/>\u003cbr/>Silverthorne Homes offers new single-family homes in Indianapolis and the surrounding suburbs, including spacious, open-concept ranch and two-story floor plan options. When you work with us, you’ll experience the difference throughout Central Indiana.\u003cbr/>\u003cbr/>There are endless attractions and activities to explore around our communities. From a Colt’s game at Lucas Oil Stadium, a Pacer’s game at Gainbridge Fieldhouse, family time at the Indianapolis Children’s Museum or Indianapolis Zoo, or a meal at one of many farm to table restaurants – you’re sure to find something for everyone. Explore our Silverthorne Homes communities in Indiana today!\u003c/p>\u003cp>\u003cspan>\u003c/span>\u003c/p>\u003cdiv>\u003cp>\u003c/p>\u003c/div>","subMetros":["Columbus","Indianapolis","Pendleton","Noblesville","Brownsburg","Avon","Franklin","Fishers","Shelbyville","Plainfield","Carmel","Westfield","Central Indiana","Greenfield","McCordsville","West Lafayette","Greenwood","New Palestine","Lafayette"]}}],"AreaSubMetro":[{"label":"McCordsville","value":{"parentMetro":"Indiana","_id":"t4hkwg","name":"McCordsville","crm":{"hubspot":{"fields":[]}}}}]},"router":{"location":{"pathname":"/homes/indiana/mccordsville/haven-ponds/4877-haven-ponds-drive","search":"","hash":"","key":"sdx5hz"}},"map":{"activePinId":""},"scroll":{},"serverside":{"pageStatus":200},"utmCodes":{},"cloudData":{}}</script><script type="text/javascript" src="/static/js/main.1fc62f6f.js"></script></body></html>
\ No newline at end of file
diff --git a/collectors/silverthorne/package.json b/collectors/silverthorne/package.json
new file mode 100644
index 00000000..07df3311
--- /dev/null
+++ b/collectors/silverthorne/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@homesonspec/collector-silverthorne",
+ "version": "0.1.0",
+ "private": true,
+ "type": "module",
+ "main": "./src/index.ts",
+ "types": "./src/index.ts",
+ "scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
+ "dependencies": {
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
+ },
+ "devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
+}
diff --git a/collectors/silverthorne/src/index.ts b/collectors/silverthorne/src/index.ts
new file mode 100644
index 00000000..f43835a5
--- /dev/null
+++ b/collectors/silverthorne/src/index.ts
@@ -0,0 +1,471 @@
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
+import { normalizeStateCode } from "@homesonspec/shared";
+import {
+ fetchFixtures,
+ LiveFetcher,
+ type ExtractionOutput,
+ type FetchContext,
+ type RawPage,
+ type SourceAdapter,
+} from "@homesonspec/collectors-common";
+
+/**
+ * Silverthorne Homes adapter — Arbor Homes' Indianapolis LUXURY / custom sister
+ * company (both Clayton Properties Group; slug "silverthorne"; recon + built
+ * 2026-08-30, TK-10487). Same architecture class as the arbor adapter — Clayton
+ * has no unified site-built feed, so each brand gets its own adapter on its own
+ * domain. The two brands even share back-office plumbing (this site's
+ * Organization JSON-LD carries an HQ at 9225 Harrison Park Court, Indianapolis —
+ * the SAME address as Arbor — and its LinkedIn sameAs literally points at
+ * linkedin.com/company/yourarborhome).
+ *
+ * SITE IDENTITY (confirmed — the INDIANAPOLIS CPG Silverthorne, NOT the Colorado
+ * town of Silverthorne): the per-home page lives at
+ * https://www.silverthornehomes.com/homes/indiana/mccordsville/haven-ponds/4877-haven-ponds-drive
+ * — an INDIANA path (McCordsville, IN 46055). The Organization JSON-LD reads
+ * "Silverthorne Homes' team … luxury home building", HQ Indianapolis IN 46216,
+ * telephone (317) — Indianapolis area code. Every captured home is IN.
+ *
+ * HOST NOTE: the CANONICAL host is the BARE host — https://www.silverthornehomes.com
+ * 301-redirects to https://silverthornehomes.com (same convention as Arbor).
+ * robots.txt is FULLY OPEN ("User-agent: * Allow: /") and references the
+ * sitemap. The sitemap lists the `www.` form of every URL, and those `www.`
+ * URLs resolve fine (301→bare, transparently followed by the shared
+ * LiveFetcher). We keep the sitemap's `www.` URL as the record sourceUrl for
+ * traceability.
+ *
+ * WIRE FORMAT: silverthornehomes.com is the SAME React SSR platform as Arbor
+ * (react-helmet / `data-reactid` markup) served gzip'd (~27 KB decompressed per
+ * home; the shared LiveFetcher sends Accept-Encoding + auto-decompresses — a
+ * plain non-decoding GET returns binary garbage, which is the trap that bit the
+ * recon). NO browser, NO bot-wall, NO XHR/WS for the facts. A plain honest-UA
+ * GET returns the complete page.
+ *
+ * MACHINE-READABLE SOURCE (preferred per the standing "own data over fragile
+ * DOM" lesson): each per-home page carries a per-home JSON-LD block typed
+ * ["SingleFamilyResidence","Product"] that is the authoritative carrier of the
+ * facts most prone to DOM rot —
+ * - address (streetAddress / addressLocality / addressRegion / postalCode),
+ * - geo (latitude / longitude),
+ * - price (offers[].price, a real integer, NOT a "$" DOM string),
+ * - community (containedIn.name, e.g. "Haven Ponds"),
+ * - a STABLE per-home id (productId === sku, a 24-hex builder document id).
+ * We prefer JSON-LD for all of the above and fall back to the DOM only when a
+ * field is genuinely absent from it.
+ *
+ * DOM (only for facts the JSON-LD does NOT carry): the PRIMARY home renders its
+ * beds / baths / stories / sqft / garage / lot# / floor-plan in a
+ * <ul>…<li class="HomeOverview_iconListItem"><b>VALUE</b>Label</li>…</ul>. Notes
+ * on selector drift vs the Arbor sibling:
+ * - Garage IS published here as "<b>3-Car</b>Garage" (Arbor omits garage →
+ * null; Silverthorne carries a real value → we parse it; posInt strips the
+ * "-Car" suffix).
+ * - Baths render as "<b>3 .5</b>Baths" (react-text-split "3" + " " + ".5") →
+ * posDec collapses it to 3.5.
+ * - There is NO <span class="DetailHeader_h2Lead"> status banner on this
+ * platform variant (the h1 is Carousel_h2 / DetailsPage_h2, no lead span).
+ * The real status signal lives in the HomeOverview_lead marketing paragraph
+ * ("… this outstanding quick move-in opportunity …"). We derive status from
+ * that prose via statusFromLead — genuine page evidence, honest-null when no
+ * recognizable phrase is present (never guessed).
+ *
+ * LOW-INVENTORY REALITY (honest): Silverthorne is a luxury / custom builder, so
+ * the sitemap currently lists exactly ONE available spec home (4877 Haven Ponds
+ * Drive). We capture ALL real available homes — right now that is 1. A correct
+ * 1-home collector beats a padded one; the selftest floor is the REAL count.
+ *
+ * Honest nulls (genuinely absent from the page, NOT fabricated):
+ * - estCompletionDate: no per-home completion date on the page → null.
+ *
+ * Facts-only: images OMITTED (buildercloud photos exist but v1 stays images-off
+ * / mediaRights=NONE per HomesOnSpec policy). Plain HTTP; one detail page ==
+ * one inventory_home.
+ *
+ * Batch control: SILVERTHORNE_PAGE_LIMIT caps per-home pages/run (default 40).
+ * Optional SILVERTHORNE_STATE filters the sitemap URL list by the first
+ * /homes/{state} slug (comma-list, e.g. "indiana").
+ */
+const BUILDER_SLUG = "silverthorne";
+const ORIGIN = "https://www.silverthornehomes.com";
+const SITEMAP = `${ORIGIN}/sitemap.xml`;
+const STATE_FILTER = (process.env.SILVERTHORNE_STATE ?? "")
+ .toLowerCase()
+ .split(",")
+ .map((s) => s.trim())
+ .filter(Boolean);
+const PAGE_LIMIT = Number(process.env.SILVERTHORNE_PAGE_LIMIT ?? "40");
+
+function fv<T>(value: T | null, raw: string | null, sourceUrl: string, evidenceText?: string | null): FieldValue<T> {
+ return { value, raw, evidenceText: evidenceText ?? raw, sourceUrl, confidence: value === null ? 0 : 1 };
+}
+
+// A positive finite integer, or null. Never guesses; 0 / negative / NaN → null.
+// Strips non-digits, so "3-Car" → 3 and "3,134" → 3134.
+const posInt = (v: unknown): number | null => {
+ const n = typeof v === "number" ? v : typeof v === "string" ? Number(String(v).replace(/[^0-9]/g, "")) : NaN;
+ return Number.isFinite(n) && n > 0 ? Math.trunc(n) : null;
+};
+// A positive decimal (baths may be 3.5), or null. Tolerates the "3 .5" spacing.
+const posDec = (v: unknown): number | null => {
+ const n = typeof v === "number" ? v : typeof v === "string" ? Number(String(v).replace(/\s+/g, "").replace(/[^0-9.]/g, "")) : NaN;
+ return Number.isFinite(n) && n > 0 ? n : null;
+};
+const clean = (v: unknown): string | null => {
+ if (v == null) return null;
+ const s = String(v)
+ .replace(/<[^>]+>/g, "")
+ .replace(/&#x([0-9a-f]+);/gi, (_m, h) => String.fromCodePoint(parseInt(h, 16)))
+ .replace(/&#(\d+);/g, (_m, d) => String.fromCodePoint(parseInt(d, 10)))
+ .replace(/'/g, "'")
+ .replace(/&/g, "&")
+ .replace(/"/g, '"')
+ .replace(/ /g, " ")
+ .replace(/\s+/g, " ")
+ .trim();
+ return s || null;
+};
+
+interface SilverthorneHome {
+ url: string;
+ street: string | null;
+ city: string | null;
+ state: string | null;
+ zip: string | null;
+ community: string | null;
+ planName: string | null;
+ lotNumber: string | null;
+ price: number | null;
+ beds: number | null;
+ bathsTotal: number | null; // decimal, half-baths folded (site publishes a single "3.5")
+ sqft: number | null;
+ stories: number | null;
+ garages: number | null; // published as "N-Car" on this platform variant (real value)
+ lat: number | null;
+ lon: number | null;
+ phone: string | null;
+ status: "PLANNED" | "MOVE_IN_READY" | "UNDER_CONSTRUCTION" | null;
+ builderInventoryId: string | null;
+}
+
+/** Pull every parsed JSON-LD object out of the page (flattening arrays + @graph). */
+function jsonLdObjects(html: string): Record<string, unknown>[] {
+ const out: Record<string, unknown>[] = [];
+ for (const b of html.matchAll(/<script[^>]*type="application\/ld\+json"[^>]*>([\s\S]*?)<\/script>/gi)) {
+ let data: unknown;
+ try {
+ data = JSON.parse(b[1]!.trim());
+ } catch {
+ continue;
+ }
+ const top = Array.isArray(data) ? data : [data];
+ for (const it of top) {
+ if (it && typeof it === "object") {
+ const g = (it as Record<string, unknown>)["@graph"];
+ if (Array.isArray(g)) {
+ for (const node of g) if (node && typeof node === "object") out.push(node as Record<string, unknown>);
+ } else {
+ out.push(it as Record<string, unknown>);
+ }
+ }
+ }
+ }
+ return out;
+}
+
+function hasType(obj: Record<string, unknown>, token: string): boolean {
+ const t = obj["@type"];
+ const types = Array.isArray(t) ? t : [t];
+ return types.some((x) => x === token);
+}
+
+/** The per-home ["SingleFamilyResidence","Product"] JSON-LD object, or null. */
+function homeJsonLd(html: string): Record<string, unknown> | null {
+ for (const o of jsonLdObjects(html)) {
+ if (hasType(o, "SingleFamilyResidence") || (hasType(o, "Product") && o["address"])) return o;
+ }
+ return null;
+}
+
+function asObj(v: unknown): Record<string, unknown> | null {
+ return v && typeof v === "object" && !Array.isArray(v) ? (v as Record<string, unknown>) : null;
+}
+function asNum(v: unknown): number | null {
+ const n = typeof v === "number" ? v : typeof v === "string" ? Number(v) : NaN;
+ return Number.isFinite(n) ? n : null;
+}
+
+/**
+ * Map Silverthorne's HomeOverview_lead prose (or any status text) to the schema
+ * constructionStatus enum. Exported so the selftest can exercise the
+ * PLANNED / UNDER_CONSTRUCTION branches, which the single captured fixture (a
+ * quick-move-in home) does not trigger. Honest-null when no recognizable phrase
+ * is present — never guessed.
+ */
+export function statusFromLead(lead: string | null): "PLANNED" | "UNDER_CONSTRUCTION" | "MOVE_IN_READY" | null {
+ if (!lead) return null;
+ const p = lead.toLowerCase();
+ if (p.includes("move-in") || p.includes("move in") || p.includes("quick move") || p.includes("available now"))
+ return "MOVE_IN_READY";
+ if (p.includes("under construction") || p.includes("being built")) return "UNDER_CONSTRUCTION";
+ if (p.includes("coming soon") || p.includes("to be built") || p.includes("pre-sale") || p.includes("presale"))
+ return "PLANNED";
+ return null;
+}
+
+// Minimal ZIP3-range guard for Silverthorne / Arbor's operating states (IN, KY,
+// OH). If a page ever publishes a ZIP whose ZIP3 can't belong to the parsed
+// state, drop it to an honest null rather than propagate a self-contradictory
+// fact. Extensible.
+const STATE_ZIP3: Record<string, [number, number][]> = {
+ IN: [[460, 479]],
+ KY: [[400, 427]],
+ OH: [[430, 459]],
+};
+function zipConsistentWithState(zip: string | null, state: string | null): boolean {
+ if (!zip || !state) return true;
+ const ranges = STATE_ZIP3[state.toUpperCase()];
+ if (!ranges) return true;
+ const z3 = Number(zip.slice(0, 3));
+ return ranges.some(([lo, hi]) => z3 >= lo && z3 <= hi);
+}
+
+/** The HomeOverview_lead marketing paragraph text (the status-bearing prose). */
+function leadProse(html: string): string | null {
+ return clean(html.match(/class="HomeOverview_lead[^"]*"[^>]*>([\s\S]*?)<\/div>/i)?.[1] ?? null);
+}
+
+/**
+ * Parse ONE Silverthorne per-home page into a home, or null if it isn't a
+ * resolvable per-home detail page. Address/geo/price/community/id come from the
+ * per-home JSON-LD (authoritative); beds/baths/stories/sqft/garage/lot/plan come
+ * from the PRIMARY home's HomeOverview list; status is derived from the
+ * HomeOverview_lead prose.
+ */
+export function parseHome(html: string, pageUrl: string): SilverthorneHome | null {
+ const ld = homeJsonLd(html);
+ if (!ld) return null; // no per-home Product JSON-LD → not a resolvable detail page
+
+ // ---- authoritative address from JSON-LD PostalAddress ----
+ const addr = asObj(ld["address"]);
+ const street = clean(addr?.["streetAddress"]);
+ if (!street) return null; // a Product block with no street isn't a home listing
+
+ const city = clean(addr?.["addressLocality"]);
+ const state = normalizeStateCode(clean(addr?.["addressRegion"]));
+ const zipRaw = (clean(addr?.["postalCode"]) ?? "").match(/\d{5}/)?.[0] ?? null;
+ const zip = zipConsistentWithState(zipRaw, state) ? zipRaw : null;
+
+ // ---- authoritative geo from JSON-LD GeoCoordinates ----
+ const geo = asObj(ld["geo"]);
+ const lat = asNum(geo?.["latitude"]);
+ const lon = asNum(geo?.["longitude"]);
+
+ // ---- authoritative price from JSON-LD offers[].price ----
+ const offers = ld["offers"];
+ const firstOffer = Array.isArray(offers) ? asObj(offers[0]) : asObj(offers);
+ const price = posInt(firstOffer?.["price"]);
+
+ // ---- authoritative community from JSON-LD containedIn.name ----
+ const containedIn = asObj(ld["containedIn"]);
+ const community = clean(containedIn?.["name"]);
+
+ // ---- authoritative stable per-home id from JSON-LD productId / sku ----
+ const builderInventoryId = clean(ld["productId"]) ?? clean(ld["sku"]);
+
+ // ---- PRIMARY home specs: the HomeOverview icon list (NOT sibling HomeCards) ----
+ // Each item: <li class="HomeOverview_iconListItem" ...><b ...>VALUE</b>Label</li>
+ // (the Floor Plan item wraps its <b> in an <a>; garage renders "<b>3-Car</b>Garage").
+ let beds: number | null = null;
+ let bathsTotal: number | null = null;
+ let sqft: number | null = null;
+ let stories: number | null = null;
+ let garages: number | null = null;
+ let lotNumber: string | null = null;
+ for (const m of html.matchAll(/<li\s+class="HomeOverview_iconListItem[^"]*"[^>]*>([\s\S]*?)<\/li>/gi)) {
+ const item = m[1] ?? "";
+ const valueMatch = item.match(/<b[^>]*>([\s\S]*?)<\/b>/i);
+ const value = clean(valueMatch?.[1] ?? null);
+ // Label = the item text after removing the <b>value</b> and any inner tags/comments.
+ const label = (clean(item.replace(/<b[^>]*>[\s\S]*?<\/b>/i, "").replace(/<!--[\s\S]*?-->/g, "")) ?? "").toLowerCase();
+ if (/^beds?\b/.test(label)) beds = posInt(value);
+ else if (/^baths?\b/.test(label)) bathsTotal = posDec(value);
+ else if (/^stor(?:y|ies)\b/.test(label)) stories = posInt(value);
+ else if (/^garage\b/.test(label)) garages = posInt(value); // "3-Car" → 3
+ else if (/^sq\.?\s*ft\.?\b/.test(label)) sqft = posInt(value);
+ else if (/^lot\s*#/.test(label)) lotNumber = value;
+ }
+
+ // ---- floor-plan name: the HomeOverview "Floor Plan" item's <a><b>The Van Buren</b> ----
+ const planItem = html.match(/Floor Plan[\s\S]{0,160}?<a[^>]*>(?:<b[^>]*>)?([^<]+)</i);
+ const planName = clean(planItem?.[1] ?? null);
+
+ // ---- status: derived from the HomeOverview_lead marketing prose ----
+ const status = statusFromLead(leadProse(html));
+
+ // ---- sales phone: first tel: link on the page (consultant / office) ----
+ const phone = clean(html.match(/href="tel:(\+?[\d]+)"/i)?.[1] ?? null);
+
+ return {
+ url: pageUrl,
+ street,
+ city,
+ state,
+ zip,
+ community,
+ planName,
+ lotNumber,
+ price,
+ beds,
+ bathsTotal,
+ sqft,
+ stories,
+ garages,
+ lat,
+ lon,
+ phone,
+ status,
+ builderInventoryId,
+ };
+}
+
+/**
+ * A per-home inventory DETAIL URL: /homes/{state}/{city}/{community}/{address}
+ * — exactly FOUR path segments after /homes/. Rejects the 1-seg state pages,
+ * 2-seg city pages, and any /undefined/ partial. (3-seg community listing pages
+ * do not occur in Silverthorne's sitemap; the guard length===4 excludes them.)
+ */
+function isDetailUrl(u: string): boolean {
+ const tail = u.split("/homes/")[1];
+ if (!tail) return false;
+ const segs = tail.replace(/\/$/, "").split(/[?#]/)[0]!.split("/");
+ if (segs.length !== 4) return false;
+ return segs.every((s) => !!s && s !== "undefined");
+}
+
+export const silverthorneAdapter: SourceAdapter = {
+ key: "silverthorne-site",
+ version: "0.1.0",
+
+ async *fetch(ctx: FetchContext): AsyncIterable<RawPage> {
+ if (ctx.mode === "fixture") {
+ yield* fetchFixtures(ctx);
+ return;
+ }
+ const fetcher = new LiveFetcher(ctx.registry);
+ const index = await fetcher.fetch(SITEMAP);
+ let homeUrls = [...index.body.toString("utf8").matchAll(/<loc>\s*([^<\s]+)\s*<\/loc>/g)]
+ .map((m) => m[1]!)
+ .filter(isDetailUrl);
+ if (STATE_FILTER.length) {
+ homeUrls = homeUrls.filter((u) => {
+ const st = u.split("/homes/")[1]?.split("/")[0]?.toLowerCase();
+ return st ? STATE_FILTER.includes(st) : false;
+ });
+ }
+ for (const url of homeUrls.slice(0, PAGE_LIMIT)) {
+ try {
+ yield await fetcher.fetch(url);
+ } catch (error) {
+ console.warn(` skip ${url}: ${error instanceof Error ? error.message : String(error)}`);
+ }
+ }
+ },
+
+ extract(page: RawPage): ExtractionOutput {
+ try {
+ const html = page.body.toString("utf8");
+ const h = parseHome(html, page.url);
+ if (!h || !h.street) return { records: [], errors: [] }; // not a resolvable detail page
+
+ const cname = h.community ?? "Unknown";
+ const records: ExtractedRecord[] = [];
+
+ // Community FIRST — publish creates the FK target the home record needs.
+ records.push({
+ entityType: "community",
+ canonicalHints: { builderSlug: BUILDER_SLUG, communityName: cname },
+ fields: {
+ name: fv(cname, cname, page.url),
+ street: fv<string>(null, null, page.url),
+ city: fv(h.city, h.city, page.url),
+ state: fv(h.state, h.state, page.url),
+ zip: fv(h.zip, h.zip, page.url),
+ county: fv<string>(null, null, page.url),
+ metro: fv<string>(null, null, page.url),
+ lat: fv(h.lat, h.lat != null ? String(h.lat) : null, page.url),
+ lon: fv(h.lon, h.lon != null ? String(h.lon) : null, page.url),
+ hoaFeeMonthly: fv<number>(null, null, page.url),
+ schoolDistrict: fv<string>(null, null, page.url),
+ ageRestricted: fv<boolean>(null, null, page.url),
+ salesPhone: fv(h.phone, h.phone, page.url),
+ },
+ });
+
+ records.push({
+ entityType: "inventory_home",
+ canonicalHints: {
+ builderSlug: BUILDER_SLUG,
+ communityName: cname,
+ // The REAL street address (never a "Lot X" fallback) — from the
+ // per-home JSON-LD PostalAddress.streetAddress. `?? h.url` never fires
+ // because parseHome already returned null when street was absent, but
+ // it keeps the hint type-safe. Parenthesized per the standing rule.
+ address: (h.street ?? h.url),
+ builderInventoryId: h.builderInventoryId ?? h.url,
+ planName: h.planName ?? undefined,
+ lotNumber: h.lotNumber ?? undefined,
+ lat: h.lat ?? undefined,
+ lon: h.lon ?? undefined,
+ },
+ fields: {
+ street: fv(h.street, h.street, page.url),
+ city: fv(h.city, h.city, page.url),
+ state: fv(h.state, h.state, page.url),
+ zip: fv(h.zip, h.zip, page.url),
+ price: fv(
+ h.price,
+ h.price != null ? `$${h.price}` : null,
+ page.url,
+ h.price != null ? `Offer price $${h.price}` : null,
+ ),
+ beds: fv(h.beds, h.beds != null ? String(h.beds) : null, page.url),
+ bathsTotal: fv(h.bathsTotal, h.bathsTotal != null ? String(h.bathsTotal) : null, page.url),
+ sqft: fv(h.sqft, h.sqft != null ? String(h.sqft) : null, page.url),
+ stories: fv(h.stories, h.stories != null ? String(h.stories) : null, page.url),
+ garageSpaces: fv(h.garages, h.garages != null ? String(h.garages) : null, page.url),
+ homeType: fv("SINGLE_FAMILY" as const, null, page.url, "Silverthorne Homes single-family inventory home"),
+ constructionStatus: fv<"PLANNED" | "UNDER_CONSTRUCTION" | "MOVE_IN_READY">(
+ h.status,
+ statusEvidence(html),
+ page.url,
+ statusEvidence(html),
+ ),
+ estCompletionDate: fv<string>(null, null, page.url), // no per-home completion date on the page
+ lotNumber: fv(h.lotNumber, h.lotNumber, page.url),
+ builderInventoryId: fv(h.builderInventoryId, h.builderInventoryId, page.url),
+ lat: fv(h.lat, h.lat != null ? String(h.lat) : null, page.url),
+ lon: fv(h.lon, h.lon != null ? String(h.lon) : null, page.url),
+ planName: fv(h.planName, h.planName, page.url),
+ // Facts-only: images intentionally omitted (mediaRights=NONE).
+ images: fv<string[]>([], null, page.url),
+ },
+ });
+
+ return { records, errors: [] };
+ } catch (error) {
+ return { records: [], errors: [{ url: page.url, reason: String(error) }] };
+ }
+ },
+};
+
+/**
+ * The evidence snippet stamped on the constructionStatus field — the short
+ * status phrase matched inside the HomeOverview_lead prose (not the whole
+ * paragraph), or null when no recognizable phrase is present.
+ */
+function statusEvidence(html: string): string | null {
+ const prose = leadProse(html);
+ if (!prose) return null;
+ const m = prose.match(/(quick move-in|move-in|move in|available now|under construction|being built|coming soon|to be built|pre-?sale)[^.!?]*/i);
+ return m ? clean(m[0]) : null;
+}
diff --git a/collectors/silverthorne/src/selftest.test.ts b/collectors/silverthorne/src/selftest.test.ts
new file mode 100644
index 00000000..704e20c1
--- /dev/null
+++ b/collectors/silverthorne/src/selftest.test.ts
@@ -0,0 +1,315 @@
+import { readFileSync, readdirSync } from "node:fs";
+import { join, dirname } from "node:path";
+import { fileURLToPath } from "node:url";
+import { describe, expect, it } from "vitest";
+import { validatePayload } from "@homesonspec/schemas";
+import { silverthorneAdapter, parseHome, statusFromLead } from "./index";
+
+/**
+ * Bounded, read-only self-test for the Silverthorne Homes adapter. Runs
+ * `parseHome` + `silverthorneAdapter.extract()` over the fixture(s) captured
+ * (rate-limited, honest UA, --compressed) from silverthornehomes.com on
+ * 2026-08-30, proves facts-only coverage, that addresses AND ids are genuinely
+ * per-home (not aggregate), that honest-null fields stay null (never fabricated,
+ * asserted directly on the real fixture), that status is derived only from real
+ * page evidence, and that every emitted record validates against the published
+ * schema.
+ *
+ * REAL INVENTORY: Silverthorne is a luxury / custom builder — the sitemap
+ * currently lists exactly ONE available spec home (4877 Haven Ponds Drive,
+ * McCordsville IN). The floor is therefore the REAL count (1), NOT a padded
+ * number. A correct 1-home collector beats a fabricated multi-home one.
+ */
+
+const HERE = dirname(fileURLToPath(import.meta.url));
+const FX = join(HERE, "..", "fixtures", "homes");
+// The real, honestly-reported available-inventory floor. Bump when the sitemap
+// grows and more fixtures are captured — never pad it above the real count.
+const REAL_HOME_FLOOR = 1;
+
+function urlMap(): Record<string, string> {
+ const tsv = readFileSync(join(FX, "_urls.tsv"), "utf8");
+ const out: Record<string, string> = {};
+ for (const line of tsv.split(/\r?\n/)) {
+ const [file, url] = line.split("\t");
+ if (file && url) out[file.trim()] = url.trim();
+ }
+ return out;
+}
+
+describe("silverthorne adapter — coverage + per-home + honest-nulls + schema", () => {
+ const files = readdirSync(FX).filter((f) => f.endsWith(".html")).sort();
+ const urls = urlMap();
+
+ it("parses per-home facts with high coverage and distinct addresses + ids", () => {
+ let n = 0;
+ const cov = {
+ price: 0, beds: 0, baths: 0, sqft: 0, stories: 0, address: 0, garage: 0,
+ community: 0, plan: 0, lot: 0, id: 0, phone: 0, status: 0, geo: 0, zip: 0,
+ };
+ const addresses = new Set<string>();
+ const ids = new Set<string>();
+
+ for (const file of files) {
+ const html = readFileSync(join(FX, file), "utf8");
+ const url = urls[file] ?? `fixture://${file}`;
+ const h = parseHome(html, url);
+ if (!h) continue;
+ n++;
+ if (h.street) {
+ cov.address++;
+ addresses.add(`${h.street}, ${h.city}, ${h.state}`);
+ }
+ if (h.builderInventoryId) {
+ cov.id++;
+ ids.add(h.builderInventoryId);
+ }
+ if (h.price != null) cov.price++;
+ if (h.beds != null) cov.beds++;
+ if (h.bathsTotal != null) cov.baths++;
+ if (h.sqft != null) cov.sqft++;
+ if (h.stories != null) cov.stories++;
+ if (h.garages != null) cov.garage++;
+ if (h.community) cov.community++;
+ if (h.planName) cov.plan++;
+ if (h.lotNumber) cov.lot++;
+ if (h.phone) cov.phone++;
+ if (h.status) cov.status++;
+ if (h.lat != null && h.lon != null) cov.geo++;
+ if (h.zip) cov.zip++;
+ }
+
+ // eslint-disable-next-line no-console
+ console.log(
+ `\n[silverthorne self-test] records=${n} distinctAddresses=${addresses.size} distinctIds=${ids.size}\n` +
+ ` price=${pct(cov.price, n)} beds=${pct(cov.beds, n)} baths=${pct(cov.baths, n)} ` +
+ `sqft=${pct(cov.sqft, n)} stories=${pct(cov.stories, n)} garage=${pct(cov.garage, n)} ` +
+ `address=${pct(cov.address, n)} zip=${pct(cov.zip, n)} geo=${pct(cov.geo, n)} ` +
+ `community=${pct(cov.community, n)} plan=${pct(cov.plan, n)} lot=${pct(cov.lot, n)} ` +
+ `id=${pct(cov.id, n)} phone=${pct(cov.phone, n)} status=${pct(cov.status, n)}`,
+ );
+
+ // The REAL available-inventory floor (honest — Silverthorne is low-volume luxury).
+ expect(n).toBeGreaterThanOrEqual(REAL_HOME_FLOOR);
+ // Distinct street address AND builder id per record. NOTE (Cody N=1 catch):
+ // with the current single real home these reduce to 1===1 and do NOT yet
+ // prove per-home uniqueness — they become a meaningful aggregate-vs-detail
+ // guard only when Silverthorne lists a 2nd home and a 2nd fixture is added.
+ // The exact-value snapshot test below is what actually pins correctness today.
+ expect(addresses.size).toBe(n);
+ expect(ids.size).toBe(n);
+ // Facts-only coverage — every core structural field present on every captured
+ // home (all sourced from the authoritative per-home JSON-LD + primary
+ // HomeOverview). On this platform variant garage IS published, so it is a
+ // real 100%-coverage field (NOT an honest-null like Arbor's).
+ expect(cov.address).toBe(n);
+ expect(cov.beds).toBe(n);
+ expect(cov.baths).toBe(n);
+ expect(cov.sqft).toBe(n);
+ expect(cov.stories).toBe(n);
+ expect(cov.garage).toBe(n);
+ expect(cov.geo).toBe(n);
+ expect(cov.zip).toBe(n);
+ expect(cov.community).toBe(n);
+ expect(cov.plan).toBe(n);
+ expect(cov.id).toBe(n);
+ expect(cov.price).toBe(n);
+ expect(cov.lot).toBe(n);
+ expect(cov.phone).toBe(n);
+ // STATUS is present when the HomeOverview_lead prose carries a recognizable
+ // phrase (the captured QMI home does); it is honest-null otherwise.
+ expect(cov.status).toBe(n);
+ });
+
+ it("extracts the EXACT known facts of the captured home (value snapshot — catches misparses coverage can't)", () => {
+ // Cody N=1 catch: at one fixture, coverage-% asserts are tautologies — a
+ // regex that returned beds=999 or sqft=47 would still show "100%". Pin every
+ // field to the value verified against the live JSON-LD (4877 Haven Ponds Dr,
+ // McCordsville IN) so any extraction drift fails loudly.
+ const first = files[0]!;
+ const h = parseHome(readFileSync(join(FX, first), "utf8"), urls[first] ?? "")!;
+ expect(h.street).toBe("4877 Haven Ponds Drive");
+ expect(h.city).toBe("McCordsville");
+ expect(h.state).toBe("IN");
+ expect(h.zip).toBe("46055");
+ expect(h.community).toBe("Haven Ponds");
+ expect(h.planName).toBe("The Van Buren");
+ expect(h.lotNumber).toBe("61");
+ expect(h.price).toBe(482995);
+ expect(h.beds).toBe(5);
+ expect(h.bathsTotal).toBe(3.5);
+ expect(h.sqft).toBe(3134);
+ expect(h.stories).toBe(2);
+ expect(h.garages).toBe(3);
+ expect(h.status).toBe("MOVE_IN_READY");
+ expect(h.builderInventoryId).toBe("67324b4e14490af34e088cb1");
+ expect(h.lat).toBeCloseTo(39.9267, 2);
+ expect(h.lon).toBeCloseTo(-85.8975, 2);
+ });
+
+ it("honest-null fields (estCompletionDate) stay null on the real fixture — never fabricated", () => {
+ for (const file of files) {
+ const html = readFileSync(join(FX, file), "utf8");
+ const url = urls[file] ?? `fixture://${file}`;
+ const { records } = silverthorneAdapter.extract(mkPage(url, html));
+ const home = records.find((r) => r.entityType === "inventory_home");
+ expect(home).toBeDefined();
+ // estCompletionDate is a genuine honest-null — the page publishes no
+ // per-home completion date — so it MUST be null (asserted directly on the
+ // real fixture, not just a synthetic strip).
+ expect((home!.fields as Record<string, { value: unknown }>)["estCompletionDate"]!.value).toBeNull();
+ // images is facts-only empty (mediaRights=NONE), never populated.
+ expect((home!.fields as Record<string, { value: unknown }>)["images"]!.value).toEqual([]);
+ }
+ });
+
+ it("canonicalHints.address is the REAL street, never a 'Lot X' fallback or URL", () => {
+ for (const file of files) {
+ const html = readFileSync(join(FX, file), "utf8");
+ const url = urls[file] ?? `fixture://${file}`;
+ const page = mkPage(url, html);
+ const { records } = silverthorneAdapter.extract(page);
+ const home = records.find((r) => r.entityType === "inventory_home");
+ expect(home).toBeDefined();
+ const addr = home!.canonicalHints.address ?? "";
+ expect(addr).not.toMatch(/^lot\b/i);
+ expect(addr).not.toMatch(/^https?:\/\//);
+ expect(addr).toMatch(/\d/); // real street addresses carry a house number
+ // And it must equal the parsed street exactly (no ternary drift).
+ const h = parseHome(html, url);
+ expect(addr).toBe(h!.street);
+ }
+ });
+
+ it("confirms Silverthorne is the Indianapolis CPG builder — every home is IN/KY/OH", () => {
+ const states = new Set<string>();
+ let sawIN = false;
+ for (const file of files) {
+ const html = readFileSync(join(FX, file), "utf8");
+ const url = urls[file] ?? `fixture://${file}`;
+ const h = parseHome(html, url);
+ if (h?.state) {
+ states.add(h.state);
+ if (h.state === "IN") sawIN = true;
+ }
+ }
+ // Only Silverthorne / Arbor's real operating states may appear — a sanity
+ // check that we're on the CPG Indianapolis Silverthorne (not the unrelated
+ // Colorado town of Silverthorne).
+ for (const s of states) expect(["IN", "KY", "OH"]).toContain(s);
+ // The captured (Indiana) inventory must include at least one IN home.
+ expect(sawIN).toBe(true);
+ });
+
+ it("status is a valid enum derived from page evidence — null when the lead prose is absent", () => {
+ const first = files[0]!;
+ const html = readFileSync(join(FX, first), "utf8");
+ const url = urls[first]!;
+ const status = parseHome(html, url)?.status;
+ expect(["PLANNED", "UNDER_CONSTRUCTION", "MOVE_IN_READY", null]).toContain(status);
+ // The captured home is a quick-move-in → MOVE_IN_READY (real page evidence).
+ expect(status).toBe("MOVE_IN_READY");
+ // Removing the HomeOverview_lead prose must drop status to null (never guessed)
+ // while the home still parses (a DIRECT semantic-null assertion: null status,
+ // real street intact) — proves status is never coerced to a non-null value.
+ const stripped = html.replace(/class="HomeOverview_lead/g, 'class="_gone_');
+ const strippedHome = parseHome(stripped, url);
+ expect(strippedHome?.status).toBeNull();
+ expect(strippedHome?.street, "null-status home still needs a real street").toBeTruthy();
+ // And that null must survive extraction into a null constructionStatus field.
+ const { records } = silverthorneAdapter.extract(mkPage(url, stripped));
+ const home = records.find((r) => r.entityType === "inventory_home");
+ expect((home!.fields as Record<string, { value: unknown }>)["constructionStatus"]!.value).toBeNull();
+ });
+
+ it("statusFromLead maps every branch — no dead PLANNED/UNDER_CONSTRUCTION code", () => {
+ // The UNDER_CONSTRUCTION / PLANNED branches fire on live "Under Construction"
+ // / "Coming Soon" homes that the single captured QMI fixture does not include
+ // — exercise every branch directly so a mapping regression can't ship.
+ expect(statusFromLead("this outstanding quick move-in opportunity")).toBe("MOVE_IN_READY");
+ expect(statusFromLead("Move-In Ready")).toBe("MOVE_IN_READY");
+ expect(statusFromLead("Available Now")).toBe("MOVE_IN_READY");
+ expect(statusFromLead("This home is Under Construction")).toBe("UNDER_CONSTRUCTION");
+ expect(statusFromLead("currently being built")).toBe("UNDER_CONSTRUCTION");
+ expect(statusFromLead("Coming Soon")).toBe("PLANNED");
+ expect(statusFromLead("To Be Built")).toBe("PLANNED");
+ expect(statusFromLead("Presale")).toBe("PLANNED");
+ // Unrecognized / absent -> honest null, never a guess.
+ expect(statusFromLead("a beautiful two-story home in a peaceful community")).toBeNull();
+ expect(statusFromLead("")).toBeNull();
+ expect(statusFromLead(null)).toBeNull();
+ });
+
+ it("a home with no offers[].price would carry a SEMANTIC null price (never a stub)", () => {
+ // Silverthorne's captured home IS priced; assert the price is a real integer,
+ // AND prove that a home stripped of its offers[].price resolves to a real
+ // semantic null (not a fabricated 0 / stub) — the honest-null discipline.
+ for (const file of files) {
+ const html = readFileSync(join(FX, file), "utf8");
+ const url = urls[file] ?? `fixture://${file}`;
+ const h = parseHome(html, url)!;
+ expect(Number.isInteger(h.price!)).toBe(true);
+ expect(h.price!).toBeGreaterThan(50_000);
+ // Strip the offers price integer → posInt(undefined) → honest null.
+ const noPrice = html.replace(/"price"\s*:\s*\d+/g, '"price":null');
+ const hNull = parseHome(noPrice, url)!;
+ expect(hNull.price).toBeNull();
+ // And the extracted field is a direct semantic null, not a $0 stub.
+ const { records } = silverthorneAdapter.extract(mkPage(url, noPrice));
+ const home = records.find((r) => r.entityType === "inventory_home");
+ expect((home!.fields as Record<string, { value: unknown }>)["price"]!.value).toBeNull();
+ }
+ });
+
+ it("geo + garage come from real sources (US-Midwest coords, N-Car parsed)", () => {
+ for (const file of files) {
+ const html = readFileSync(join(FX, file), "utf8");
+ const url = urls[file] ?? `fixture://${file}`;
+ const h = parseHome(html, url)!;
+ // Geo is present on every home (JSON-LD GeoCoordinates) and must sit in a
+ // US-Midwest bounding box — proves real coords, not placeholders.
+ expect(h.lat!).toBeGreaterThan(36);
+ expect(h.lat!).toBeLessThan(42);
+ expect(h.lon!).toBeLessThan(-82);
+ expect(h.lon!).toBeGreaterThan(-88);
+ // Garage is parsed from the "N-Car" HomeOverview item (posInt strips -Car).
+ expect(Number.isInteger(h.garages!)).toBe(true);
+ expect(h.garages!).toBeGreaterThan(0);
+ }
+ });
+
+ it("emits schema-valid community + inventory_home records", () => {
+ let homes = 0;
+ for (const file of files) {
+ const html = readFileSync(join(FX, file), "utf8");
+ const url = urls[file] ?? `fixture://${file}`;
+ const page = mkPage(url, html);
+ const { records, errors } = silverthorneAdapter.extract(page);
+ expect(errors).toEqual([]);
+ for (const rec of records) {
+ if (rec.entityType === "inventory_home") homes++;
+ const result = validatePayload(rec);
+ if (!result.ok) {
+ // eslint-disable-next-line no-console
+ console.error(`validation failed for ${rec.entityType} @ ${url}`, result);
+ }
+ expect(result.ok).toBe(true);
+ }
+ }
+ expect(homes).toBeGreaterThanOrEqual(REAL_HOME_FLOOR);
+ });
+});
+
+function mkPage(url: string, html: string) {
+ return {
+ url,
+ retrievedAt: new Date().toISOString(),
+ contentType: "text/html",
+ body: Buffer.from(html),
+ contentHash: "test",
+ };
+}
+
+function pct(a: number, b: number): string {
+ return b ? `${Math.round((100 * a) / b)}%` : "n/a";
+}
diff --git a/collectors/silverthorne/tsconfig.json b/collectors/silverthorne/tsconfig.json
new file mode 100644
index 00000000..e9bfc482
--- /dev/null
+++ b/collectors/silverthorne/tsconfig.json
@@ -0,0 +1 @@
+{ "extends": "../../tsconfig.base.json", "compilerOptions": { "noEmit": true }, "include": ["src/**/*.ts"] }
← 86d5d249 wire(homesonspec): register Arbor Homes (Indianapolis CPG) c
·
back to Homesonspec
·
wire(homesonspec): register Silverthorne Homes (Indianapolis c233bfe9 →