OpenAI GPT 6.1 Sol Pro – Real Estate

via OpenAI · Generated

  • AIMAC Debt 3.85
  • Cost $0.39
  • Total Violations 7
  • HTML Size 64 KB
  • Em Dashes 8

Screenshot

View OpenAI GPT 6.1 Sol Pro Real Estate page View Live Page

Accessibility Issues Found

7 Serious

  • color-contrast serious 7 instances

    Elements must meet minimum color contrast ratio thresholds

    Example HTML <p>The coffee shop that knows your order. Your favorite Saturday walk. Discover the everyday details that make Portland’s neighborhoods feel like h...

Artifacts

View Generated HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="theme-color" content="#253d32">
  <meta name="description" content="Discover your next home with Alder & Acre, a boutique Portland real estate agency. Explore homes, neighborhood guides, and thoughtful advice for every move.">
  <title>Alder & Acre | A better place to put down roots.</title>
  <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=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet">
  <style>
    :root{--ink:#253d32;--text:#3c4840;--muted:#69726b;--paper:#f7f7f0;--white:#fff;--lime:#e1efb0;--line:#dce0d4;--soft:#eceee4;--radius:14px}
    *{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;background:var(--paper);color:var(--text);font-family:"DM Sans",sans-serif;font-size:15px;line-height:1.65}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}a{color:inherit;text-decoration:none}button{cursor:pointer}img{display:block;width:100%;object-fit:cover}h1,h2,h3,h4,p{margin:0}h1,h2,h3,h4{font-family:Manrope,sans-serif;color:var(--ink)}h1,h2{font-weight:500;letter-spacing:-2.5px;line-height:1.12}h1{font-size:clamp(44px,5.1vw,76px)}h2{font-size:clamp(32px,3.5vw,48px)}h3{font-size:21px;letter-spacing:-.6px}p+p{margin-top:14px}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid #7e9c45;outline-offset:4px}
    .container{max-width:1240px;padding:0 32px;margin:auto}.eyebrow{font-size:11px;letter-spacing:2px;font-weight:700;text-transform:uppercase;display:flex;align-items:center;gap:9px;margin-bottom:20px}.eyebrow::before{content:"";width:7px;height:7px;border-radius:50%;background:#839963;flex-shrink:0}.section{padding:94px 0}.section-head{display:flex;justify-content:space-between;align-items:flex-end;gap:30px;margin-bottom:34px}.section-head p{max-width:440px;color:var(--muted);margin-top:17px}.button{display:inline-flex;align-items:center;justify-content:center;gap:22px;min-height:48px;padding:12px 24px;background:var(--ink);color:white;border:1px solid var(--ink);border-radius:7px;font-weight:600;font-size:13px;transition:background .2s,transform .2s}.button:hover{background:#395443;transform:translateY(-2px)}.button.light{background:var(--lime);color:var(--ink);border-color:var(--lime)}.button.light:hover{background:#cfdf9d}.button.outline{background:transparent;color:var(--ink);border-color:#bac4b7}.button.outline:hover{background:var(--soft)}.arrow{font-size:20px;line-height:1}.text-link{display:inline-flex;align-items:center;gap:16px;font-weight:600;font-size:13px;border-bottom:1px solid #9eaa94;padding-bottom:5px;white-space:nowrap}.text-link:hover{color:#658345}.skip-link{position:fixed;top:-80px;left:20px;z-index:100;background:var(--ink);color:white;padding:12px}.skip-link:focus{top:10px}
    .topbar{background:var(--ink);color:#e7eddd;text-align:center;font-size:11px;letter-spacing:.4px;padding:9px 16px}.topbar a{margin-left:12px;text-decoration:underline;text-underline-offset:3px}.header{background:rgba(247,247,240,.97);position:sticky;top:0;z-index:40;border-bottom:1px solid var(--line);backdrop-filter:blur(14px)}.header-inner{min-height:88px;display:flex;align-items:center;justify-content:space-between;gap:24px}.brand{display:flex;align-items:center;gap:11px}.brand img{height:42px;width:42px;border-radius:7px}.brand-name{font-family:Manrope,sans-serif;font-size:23px;font-weight:700;letter-spacing:-1px;color:var(--ink);line-height:1.2}.brand-tagline{font-size:9px;letter-spacing:.9px;color:var(--muted);margin-top:4px}.nav{display:flex;align-items:center;gap:25px}.nav a{font-size:12px;font-weight:500}.nav a:hover{color:#658345}.header .button{font-size:11px;padding:10px 17px;min-height:42px}.menu-toggle{display:none;background:transparent;border:1px solid var(--line);border-radius:5px;padding:7px 12px;color:var(--ink)}
    .hero{padding-top:49px}.hero-grid{display:grid;grid-template-columns:1.02fr 1fr;gap:62px;align-items:center}.hero-copy{padding:22px 0 48px}.hero .eyebrow{margin-bottom:27px}.hero h1 span{color:#718456}.hero-description{font-size:16px;color:var(--muted);max-width:425px;margin-top:25px;line-height:1.85}.hero-actions{display:flex;align-items:center;gap:27px;margin-top:29px}.hero-proof{display:flex;gap:13px;align-items:center;margin-top:38px}.avatars{display:flex;padding-left:0}.avatars img{width:35px;height:35px;border-radius:50%;border:2px solid var(--paper);margin-left:-9px}.avatars img:first-child{margin-left:0}.proof-text{font-size:10px;color:var(--muted)}.stars{color:var(--ink);letter-spacing:2px;font-size:12px;font-weight:700}.hero-visual{position:relative;align-self:stretch;min-height:535px;border-radius:120px 12px 12px 12px;overflow:hidden}.hero-visual>img{height:100%;position:absolute;inset:0;filter:brightness(.83)}.hero-visual::after{content:"";position:absolute;inset:50% 0 0;background:linear-gradient(transparent,rgba(17,33,24,.58))}.hero-photo-label{position:absolute;bottom:28px;left:30px;right:30px;z-index:1;color:white;display:flex;justify-content:space-between;align-items:end}.hero-photo-label h3{color:white;font-size:23px;margin:4px 0}.hero-photo-label p{font-size:11px;opacity:.86}.photo-kicker{text-transform:uppercase;letter-spacing:1.5px;font-size:9px}.round-link{width:44px;height:44px;border-radius:50%;border:1px solid #ffffff85;background:#ffffff16;color:white;display:grid;place-items:center;font-size:23px}.hero-stamp{position:absolute;right:23px;top:23px;z-index:2;background:var(--lime);color:var(--ink);width:91px;height:91px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;transform:rotate(10deg);font-size:9px;text-transform:uppercase;letter-spacing:1px;font-weight:600;line-height:1.7}.hero-stamp strong{font-size:24px;line-height:1.3}
    .search-panel{position:relative;margin-top:-7px;z-index:3;max-width:1040px;background:white;border:1px solid var(--line);border-radius:12px;padding:0 25px 22px;box-shadow:0 14px 35px #253d3208}.search-tabs{display:flex;gap:26px;margin-bottom:21px;border-bottom:1px solid var(--line)}.search-tab{border:0;background:transparent;padding:16px 5px 12px;font-size:12px;color:var(--muted);border-bottom:2px solid transparent}.search-tab.active{color:var(--ink);border-bottom-color:var(--ink);font-weight:700}.search-form{display:grid;grid-template-columns:1.6fr 1fr .85fr auto;gap:22px;align-items:end}.field label{display:block;font-size:10px;text-transform:uppercase;letter-spacing:1px;font-weight:700;margin-bottom:6px}.field input,.field select,.field textarea{width:100%;background:var(--paper);border:1px solid var(--line);border-radius:6px;padding:11px 12px;color:var(--ink);min-height:44px}.search-form .field input,.search-form .field select{border:0;background:transparent;padding:4px 0;min-height:30px;font-size:13px}.search-form .field{border-right:1px solid var(--line);padding-right:18px}.search-form .button{min-width:140px}.trust-strip{display:grid;grid-template-columns:1.3fr repeat(3,1fr);align-items:center;padding:33px 0 38px;border-bottom:1px solid var(--line);gap:25px}.trust-intro{font-size:12px;color:var(--muted);max-width:180px}.trust-item{display:flex;gap:12px;align-items:center}.trust-item strong{display:block;font-family:Manrope,sans-serif;font-size:23px;font-weight:500;color:var(--ink);letter-spacing:-1px}.trust-item span{font-size:11px;color:var(--muted)}.trust-icon{font-size:24px;color:#8c9e72}
    .listing-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:23px}.property-card{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:white;transition:box-shadow .2s,transform .2s}.property-card:hover{transform:translateY(-4px);box-shadow:0 15px 30px #253d320b}.property-image{height:235px;position:relative;overflow:hidden}.property-image img{height:100%;transition:transform .4s}.property-card:hover .property-image img{transform:scale(1.04)}.badge{position:absolute;left:15px;top:15px;padding:5px 10px;background:var(--paper);border-radius:4px;color:var(--ink);font-size:9px;font-weight:700;letter-spacing:.6px;text-transform:uppercase}.badge.green{background:var(--lime)}.save-button{position:absolute;right:14px;top:14px;width:32px;height:32px;background:white;border:0;border-radius:50%;font-size:21px;color:var(--ink);line-height:1}.save-button[aria-pressed="true"]{background:var(--lime);color:#355324}.property-body{padding:21px}.price-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.price{font-family:Manrope,sans-serif;font-size:24px;font-weight:700;letter-spacing:-.7px;color:var(--ink)}.property-type{font-size:9px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}.property-body h3{font-size:15px;margin-top:8px;letter-spacing:-.2px}.property-location{font-size:11px;color:var(--muted);margin-top:2px}.property-specs{display:flex;gap:13px;font-size:11px;border-bottom:1px solid var(--line);padding:16px 0;margin-bottom:15px;flex-wrap:wrap}.property-description{font-size:12px;color:var(--muted);line-height:1.75;margin-bottom:18px;min-height:63px}.property-actions{display:flex;justify-content:space-between;gap:12px;align-items:center}.property-actions button{border:0;background:none;color:var(--ink);padding:0;font-size:11px;font-weight:700}.property-actions button:hover{text-decoration:underline}.listing-bottom{display:flex;justify-content:space-between;align-items:center;margin-top:27px;gap:18px}.listing-note{color:var(--muted);font-size:11px}.search-feedback{font-size:13px;margin-bottom:20px;color:var(--ink)}[hidden]{display:none!important}
    .neighborhoods{background:var(--soft)}.neighborhood-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:23px}.neighborhood-card{position:relative;min-height:340px;border-radius:12px;overflow:hidden;color:white}.neighborhood-card img{position:absolute;inset:0;height:100%;transition:transform .5s}.neighborhood-card:hover img{transform:scale(1.05)}.neighborhood-card::after{content:"";position:absolute;inset:0;background:linear-gradient(transparent 15%,rgba(12,29,21,.86))}.neighborhood-content{position:absolute;bottom:23px;left:24px;right:24px;z-index:1}.neighborhood-content h3{color:white;font-size:27px;font-weight:500}.neighborhood-content p{font-size:12px;line-height:1.7;margin-top:8px;color:#e6e9df}.neighborhood-content button{border:0;background:transparent;color:var(--lime);font-size:11px;padding:0;margin-top:16px;font-weight:600}.neighborhood-details{margin-top:27px;display:grid;grid-template-columns:1fr 1fr;gap:55px;color:var(--muted);font-size:13px}.neighborhood-details strong{color:var(--ink)}
    .seller{background:var(--ink);color:#d4decd;position:relative;overflow:hidden}.seller .eyebrow{color:var(--lime)}.seller h2{color:var(--paper)}.seller-grid{display:grid;grid-template-columns:1fr 1fr;gap:85px;align-items:center}.seller-copy>p{font-size:14px;line-height:1.9;margin-top:24px;max-width:470px}.seller-copy .button{margin-top:30px}.seller-steps{display:grid;gap:24px}.seller-step{display:flex;gap:21px;padding-bottom:24px;border-bottom:1px solid #526353}.seller-step:last-child{border:0;padding-bottom:0}.step-number{color:var(--lime);font-family:Manrope,sans-serif;font-size:13px;margin-top:3px}.seller-step h3{color:white;font-size:18px;font-weight:500;margin-bottom:8px}.seller-step p{color:#c0cdba;font-size:12px;line-height:1.8}.seller-note{font-size:10px!important;color:#aebbab}
    .calculator-grid{display:grid;grid-template-columns:.9fr 1.1fr;gap:72px;align-items:center}.calculator-copy>p{margin-top:21px;color:var(--muted);font-size:14px;line-height:1.85}.checklist{list-style:none;padding:0;margin:23px 0 25px}.checklist li{font-size:12px;margin-bottom:11px;display:flex;gap:11px}.checklist li::before{content:"✓";color:#6c834e;font-weight:bold}.calculator-card{background:white;border:1px solid var(--line);border-radius:14px;padding:29px}.calculator-title{font-size:17px;letter-spacing:-.4px;margin-bottom:23px}.calc-fields{display:grid;grid-template-columns:1fr 1fr;gap:18px}.calculator-card .field label{font-size:9px}.estimate{background:var(--soft);margin-top:25px;border-radius:9px;padding:22px;display:flex;align-items:center;justify-content:space-between;gap:15px}.estimate-label{font-size:11px;color:var(--muted)}.estimate-value{font-family:Manrope,sans-serif;font-size:37px;line-height:1.3;color:var(--ink);letter-spacing:-1.5px}.estimate-value span{font-size:12px;letter-spacing:0;color:var(--muted)}.estimate-mark{font-size:28px;color:#8e9d73}.calc-breakdown{display:flex;justify-content:space-between;gap:14px;font-size:10px;padding:15px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}.calc-disclaimer{font-size:10px;color:var(--muted);line-height:1.7;margin-top:14px}.calc-error{font-size:12px;color:#9b372b;margin-top:12px}
    .about{border-top:1px solid var(--line)}.about-grid{display:grid;grid-template-columns:1fr 1fr;gap:74px;align-items:center}.about-image{position:relative}.about-image>img{height:420px;border-radius:12px;filter:saturate(.8)}.about-caption{position:absolute;bottom:22px;left:22px;right:22px;background:var(--paper);padding:17px 20px;border-radius:6px;display:flex;justify-content:space-between;align-items:center}.about-caption strong{font-size:13px;color:var(--ink);display:block}.about-caption span{font-size:10px;color:var(--muted)}.about-copy>p{margin-top:22px;font-size:14px;color:var(--muted);line-height:1.85}.about-copy .text-link{margin-top:25px}.testimonial{background:var(--soft);padding:26px;border-radius:10px;margin-top:30px}.testimonial blockquote{margin:0;font-size:15px;color:var(--ink);line-height:1.75}.testimonial-person{display:flex;align-items:center;gap:11px;margin-top:20px}.testimonial-person img{width:37px;height:37px;border-radius:50%}.testimonial-person strong{font-size:11px;display:block}.testimonial-person span{font-size:10px;color:var(--muted)}.testimonial-stars{margin-left:auto;font-size:12px;letter-spacing:2px;color:#6f804e}
    .faq{padding-top:25px}.faq-grid{display:grid;grid-template-columns:.75fr 1.25fr;gap:80px}.faq-intro p{margin-top:20px;color:var(--muted);font-size:13px}.faq-intro .text-link{margin-top:23px}details{border-bottom:1px solid var(--line)}details:first-child{border-top:1px solid var(--line)}summary{list-style:none;cursor:pointer;font-family:Manrope,sans-serif;font-size:14px;font-weight:600;color:var(--ink);padding:22px 33px 22px 0;position:relative}summary::-webkit-details-marker{display:none}summary::after{content:"+";position:absolute;right:4px;top:16px;font-size:25px;font-weight:400}details[open] summary::after{content:"−"}details p{color:var(--muted);font-size:13px;padding:0 30px 22px 0;line-height:1.9}
    .contact-banner{background:var(--lime);border-radius:13px;padding:46px 52px;margin-bottom:74px;display:flex;justify-content:space-between;gap:35px;align-items:center}.contact-banner h2{font-size:36px;letter-spacing:-1.5px}.contact-banner p{font-size:13px;margin-top:13px;max-width:540px}.footer{background:var(--ink);color:#c1cdba;padding:60px 0 22px}.footer-main{display:grid;grid-template-columns:1.7fr 1fr 1fr 1.3fr;gap:44px}.footer .brand-name{color:var(--paper)}.footer .brand-tagline{color:#bcc8b4}.footer-intro>p{font-size:12px;line-height:1.9;max-width:255px;margin-top:22px}.footer h3{font-size:11px;color:white;letter-spacing:.4px;margin:5px 0 20px}.footer-links{display:flex;flex-direction:column;gap:10px;font-size:12px}.footer a:hover{color:var(--lime)}.footer address{font-style:normal;font-size:12px;line-height:1.9}.footer-contact a{display:block;font-size:12px;margin-top:10px}.socials{display:flex;gap:18px;margin-top:22px;font-size:11px}.footer-bottom{display:flex;align-items:center;justify-content:space-between;gap:20px;border-top:1px solid #526353;margin-top:46px;padding-top:22px;font-size:10px}.legal-links{display:flex;gap:24px}.legal-note{font-size:9px;color:#a6b69f;margin-top:15px;max-width:950px}.footer button{border:0;background:none;padding:0;color:inherit;font:inherit;cursor:pointer}.footer button:hover{text-decoration:underline}
    dialog{border:1px solid var(--line);border-radius:15px;padding:0;max-width:570px;width:calc(100% - 32px);color:var(--text);background:var(--paper);max-height:90vh}dialog::backdrop{background:#102319a6;backdrop-filter:blur(5px)}.modal-header{padding:26px 28px 16px;display:flex;align-items:start;justify-content:space-between;gap:20px}.modal-header h2{font-size:29px;letter-spacing:-1px}.modal-close{border:1px solid var(--line);border-radius:50%;width:32px;height:32px;background:white;font-size:22px;flex-shrink:0;line-height:1}.modal-body{padding:0 28px 28px;font-size:13px}.modal-body>p{margin-bottom:18px;color:var(--muted)}.modal-body form{display:grid;gap:16px}.modal-body .button{margin-top:5px}.modal-image{height:220px;border-radius:8px;margin-bottom:18px}.modal-specs{font-weight:600;color:var(--ink);margin-bottom:12px}.consent{font-size:10px;color:var(--muted)}.success-message{padding:25px;background:var(--soft);border-radius:8px}.success-message h3{margin-bottom:12px}.toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);padding:12px 22px;border-radius:7px;background:var(--ink);color:white;font-size:12px;box-shadow:0 5px 30px #0002;z-index:70;max-width:calc(100% - 32px);text-align:center}
    @media(min-width:1450px){.container{max-width:1320px}.hero-visual{min-height:590px}}
    @media(max-width:1100px){.nav{gap:16px}.header .button{display:none}.hero-grid{gap:35px}.hero h1{font-size:60px}.hero-visual{min-height:515px}.hero-actions{gap:20px}.seller-grid,.calculator-grid,.about-grid{gap:45px}.footer-main{gap:25px}.property-specs{gap:8px}.property-type{font-size:8px}}
    @media(max-width:850px){.container{padding:0 23px}.header-inner{min-height:75px}.menu-toggle{display:block}.nav{display:none;position:absolute;left:0;right:0;top:75px;background:var(--paper);padding:24px;border-bottom:1px solid var(--line);box-shadow:0 15px 20px #0001;flex-direction:column;align-items:stretch;gap:18px}.nav.open{display:flex}.nav a{font-size:15px}.hero-grid{grid-template-columns:1fr 1fr;gap:25px}.hero h1{font-size:47px;letter-spacing:-2px}.hero-description{font-size:14px}.hero-actions{flex-direction:column;align-items:start;gap:18px}.hero-visual{min-height:500px;border-top-left-radius:80px}.hero-photo-label{left:20px;right:20px}.hero-photo-label h3{font-size:18px}.hero-stamp{width:75px;height:75px;font-size:7px}.search-panel{margin-top:20px}.search-form{gap:12px;grid-template-columns:1.3fr 1fr .7fr}.search-form .button{grid-column:1/-1}.search-form .field:nth-child(3){border:0}.trust-strip{grid-template-columns:repeat(3,1fr)}.trust-intro{display:none}.section{padding:65px 0}.listing-grid{grid-template-columns:repeat(2,1fr)}.property-card:nth-child(3){grid-column:1/-1;max-width:calc(50% - 11px);width:100%}.neighborhood-grid{gap:15px}.neighborhood-card{min-height:320px}.neighborhood-content{left:17px;right:17px}.neighborhood-content h3{font-size:22px}.seller-grid,.calculator-grid,.about-grid{grid-template-columns:1fr;gap:38px}.seller-copy>p{max-width:100%}.seller-steps{grid-template-columns:repeat(3,1fr);gap:22px}.seller-step{border-bottom:0;padding-bottom:0;gap:10px}.seller-step h3{font-size:16px}.calculator-copy{max-width:620px}.about-image>img{height:350px}.about-copy{max-width:650px}.faq-grid{gap:40px;grid-template-columns:.8fr 1.2fr}.contact-banner{padding:33px;gap:25px;margin-bottom:55px}.contact-banner h2{font-size:30px}.footer-main{grid-template-columns:1.4fr 1fr}.footer-bottom{flex-wrap:wrap}.neighborhood-details{gap:28px}}
    @media(max-width:580px){.topbar{font-size:9px}.topbar a{margin-left:6px}.container{padding:0 20px}.brand-name{font-size:21px}.brand-tagline{font-size:8px}.hero{padding-top:27px}.hero-grid{grid-template-columns:1fr;gap:25px}.hero-copy{padding:9px 0 0}.hero h1{font-size:52px;max-width:420px}.hero .eyebrow{margin-bottom:20px;font-size:10px}.hero-description{font-size:14px;max-width:100%;margin-top:20px}.hero-actions{flex-direction:row;align-items:center;gap:24px}.hero-proof{margin-top:24px}.hero-visual{min-height:340px;border-top-left-radius:75px}.hero-stamp{right:18px;top:18px}.hero-photo-label h3{font-size:21px}.search-panel{padding:0 18px 18px;margin-top:20px}.search-tabs{margin-bottom:16px}.search-form{grid-template-columns:1fr 1fr;gap:15px}.search-form .field:first-child{grid-column:1/-1;border-right:0;border-bottom:1px solid var(--line);padding-bottom:12px}.search-form .field{padding-right:10px}.search-form .field input,.search-form .field select{font-size:12px}.trust-strip{gap:12px;padding:27px 0}.trust-item{gap:7px}.trust-icon{display:none}.trust-item strong{font-size:21px}.trust-item span{font-size:9px}.section{padding:53px 0}.section-head{display:block;margin-bottom:26px}.section-head>.text-link{margin-top:21px}.section-head p{font-size:13px;margin-top:14px}h2{font-size:35px;letter-spacing:-1.6px}.eyebrow{font-size:10px;margin-bottom:16px}.listing-grid{grid-template-columns:1fr}.property-card:nth-child(3){grid-column:auto;max-width:none}.property-image{height:245px}.property-description{min-height:0}.listing-bottom{align-items:start;flex-direction:column}.neighborhood-grid{grid-template-columns:1fr}.neighborhood-card{min-height:320px}.neighborhood-content h3{font-size:28px}.neighborhood-details{grid-template-columns:1fr;gap:15px;font-size:12px}.seller-grid{gap:32px}.seller-steps{grid-template-columns:1fr;gap:22px}.seller-step{gap:20px;border-bottom:1px solid #526353;padding-bottom:20px}.seller-step h3{font-size:18px}.calculator-card{padding:20px}.calc-fields{gap:15px}.calc-fields .field label{letter-spacing:.4px;font-size:9px}.calc-fields input,.calc-fields select{font-size:13px}.estimate{padding:18px}.estimate-value{font-size:32px}.calc-breakdown{font-size:9px}.about-grid{gap:30px}.about-image>img{height:310px}.about-caption{left:15px;right:15px;bottom:15px;padding:14px}.testimonial{padding:22px}.testimonial-stars{display:none}.faq{padding-top:0}.faq-grid{grid-template-columns:1fr;gap:27px}.faq-intro h2{max-width:300px}.contact-banner{flex-direction:column;align-items:start;padding:28px;margin-bottom:45px}.contact-banner h2{font-size:31px}.contact-banner .button{width:100%}.footer{padding-top:44px}.footer-main{grid-template-columns:1fr 1fr;gap:33px 20px}.footer-intro{grid-column:1/-1}.footer-intro>p{max-width:100%}.footer-contact{grid-column:1/-1}.footer-bottom{font-size:9px;gap:15px;margin-top:32px}.legal-links{gap:17px}.modal-header{padding:23px 22px 15px}.modal-body{padding:0 22px 24px}}
    @media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important}}
  </style>
</head>
<body>
  <a class="skip-link" href="#main">Skip to content</a>
  <div class="topbar">Good neighbors. Great homes. Locally rooted in Portland since 2012. <a href="#about">Meet your people ↗</a></div>
  <header class="header">
    <div class="container header-inner">
      <a class="brand" href="#" aria-label="Alder and Acre home">
        <img src="https://placehold.co/84x84/253d32/e1efb0?text=A%26A&font=playfair%20display" alt="Alder & Acre logo" width="42" height="42">
        <div><div class="brand-name">alder & acre<span style="color:#869868">.</span></div><div class="brand-tagline">A BETTER PLACE TO PUT DOWN ROOTS.</div></div>
      </a>
      <button class="menu-toggle" aria-expanded="false" aria-controls="primary-nav" aria-label="Open navigation">☰</button>
      <nav class="nav" id="primary-nav" aria-label="Primary navigation">
        <a href="#listings" data-nav-mode="buy">Buy</a>
        <a href="#seller">Sell</a>
        <a href="#listings" data-nav-mode="rent">Rent</a>
        <a href="#neighborhoods">Neighborhoods</a>
        <a href="#calculator">Calculator</a>
        <a href="#about">About</a>
        <a href="#contact">Contact</a>
      </nav>
      <button class="button" data-inquiry="Let's talk about your next move">Let’s talk <span class="arrow" aria-hidden="true">↗</span></button>
    </div>
  </header>

  <main id="main">
    <section class="hero" aria-labelledby="hero-heading">
      <div class="container">
        <div class="hero-grid">
          <div class="hero-copy">
            <div class="eyebrow">Portland homes. Human connections.</div>
            <h1 id="hero-heading">Find your home.<br>Find <span>your people.</span></h1>
            <p class="hero-description">More than an address. A neighborhood you love, a space that feels like you, and a team that makes getting there feel a little easier.</p>
            <div class="hero-actions">
              <a class="button" href="#listings">Explore homes <span class="arrow" aria-hidden="true">↗</span></a>
              <a class="text-link" href="#about">Meet Alder & Acre <span aria-hidden="true">↗</span></a>
            </div>
            <div class="hero-proof">
              <div class="avatars" aria-hidden="true">
                <img src="https://i.pravatar.cc/70?u=alder-maya" alt="" width="35" height="35">
                <img src="https://i.pravatar.cc/70?u=alder-james" alt="" width="35" height="35">
                <img src="https://i.pravatar.cc/70?u=alder-lena" alt="" width="35" height="35">
              </div>
              <div class="proof-text"><div class="stars" aria-label="5 out of 5 stars">★★★★★</div>A thoughtful move for 400+ happy households.</div>
            </div>
          </div>
          <div class="hero-visual">
            <img src="https://picsum.photos/id/1067/1000/1100" alt="Architectural inspiration for modern urban living" fetchpriority="high" width="1000" height="1100">
            <div class="hero-stamp"><span>Rooted here</span><strong>PDX</strong><span>Since 2012</span></div>
            <div class="hero-photo-label">
              <div><span class="photo-kicker">A fresh perspective on home</span><h3>Room for your next chapter.</h3><p>Thoughtfully selected. Locally connected.</p></div>
              <a class="round-link" href="#listings" aria-label="Explore featured homes">↗</a>
            </div>
          </div>
        </div>
        <div class="search-panel">
          <div class="search-tabs" role="group" aria-label="Property search type">
            <button class="search-tab active" type="button" data-mode="buy" aria-pressed="true">Buy a home</button>
            <button class="search-tab" type="button" data-mode="rent" aria-pressed="false">Find a rental</button>
          </div>
          <form class="search-form" id="search-form">
            <div class="field"><label for="location">Where feels like home?</label><input id="location" name="location" type="search" placeholder="Neighborhood, address, or ZIP"></div>
            <div class="field"><label for="max-price">Your price range</label><select id="max-price" name="price"><option value="">Any price</option><option value="600000">Up to $600,000</option><option value="800000">Up to $800,000</option><option value="1000000">Up to $1,000,000</option></select></div>
            <div class="field"><label for="beds">Bedrooms</label><select id="beds" name="beds"><option value="0">Any beds</option><option value="2">2+ bedrooms</option><option value="3">3+ bedrooms</option><option value="4">4+ bedrooms</option></select></div>
            <button class="button" type="submit">Find my home <span aria-hidden="true">↗</span></button>
          </form>
        </div>
        <div class="trust-strip">
          <p class="trust-intro">Small team. Deep roots.<br>Good things happen here.</p>
          <div class="trust-item"><span class="trust-icon" aria-hidden="true">⌂</span><div><strong>400+</strong><span>Homes. Stories. New beginnings.</span></div></div>
          <div class="trust-item"><span class="trust-icon" aria-hidden="true">✧</span><div><strong>12+</strong><span>Years of local experience</span></div></div>
          <div class="trust-item"><span class="trust-icon" aria-hidden="true">♡</span><div><strong>100%</strong><span>Invested in your next chapter</span></div></div>
        </div>
      </div>
    </section>

    <section class="section" id="listings" aria-labelledby="listing-heading">
      <div class="container">
        <div class="section-head">
          <div><div class="eyebrow">Good spaces, great possibilities</div><h2 id="listing-heading">A few places to fall for.</h2><p>Character, comfort, and a little something special. Explore our curated collection of Portland homes, with the details you need to make an informed move.</p></div>
          <a class="text-link" href="#search-form">Refine your search <span aria-hidden="true">↗</span></a>
        </div>
        <p class="search-feedback" id="search-feedback" aria-live="polite" hidden></p>
        <div class="listing-grid" id="listing-grid"></div>
        <div class="listing-bottom">
          <p class="listing-note">Illustrative listings & photography. Availability and listing price subject to confirmation.</p>
          <button class="text-link" style="background:none;border-top:0;border-left:0;border-right:0;cursor:pointer" data-inquiry="Help me find the right home">Not seeing your home? Let’s find it <span aria-hidden="true">↗</span></button>
        </div>
      </div>
    </section>

    <section class="section neighborhoods" id="neighborhoods" aria-labelledby="neighborhood-heading">
      <div class="container">
        <div class="section-head">
          <div><div class="eyebrow">Love where you land</div><h2 id="neighborhood-heading">A home is only half the story.</h2><p>The coffee shop that knows your order. Your favorite Saturday walk. Discover the everyday details that make Portland’s neighborhoods feel like home.</p></div>
          <button class="text-link" style="background:none;border-top:0;border-left:0;border-right:0;cursor:pointer" data-inquiry="Build my neighborhood shortlist">Find your neighborhood <span aria-hidden="true">↗</span></button>
        </div>
        <div class="neighborhood-grid">
          <article class="neighborhood-card">
            <img src="https://picsum.photos/id/164/650/750" alt="Leafy streets and neighborhood architecture" loading="lazy" width="650" height="750">
            <div class="neighborhood-content"><div class="photo-kicker">Tree-lined streets · Local favorites</div><h3>Laurelhurst</h3><p>Historic character, gracious porches, and a beloved park at the heart of it all. A slower rhythm, just minutes from the city.</p><button data-neighborhood="Laurelhurst">Explore Laurelhurst <span aria-hidden="true">↗</span></button></div>
          </article>
          <article class="neighborhood-card">
            <img src="https://picsum.photos/id/43/650/750" alt="Urban neighborhood with vibrant architecture" loading="lazy" width="650" height="750">
            <div class="neighborhood-content"><div class="photo-kicker">Creative energy · Everyday discovery</div><h3>Alberta Arts</h3><p>Independent galleries, colorful storefronts, and inviting neighborhood cafes. An expressive corner of Northeast Portland.</p><button data-neighborhood="Alberta Arts">Explore Alberta Arts <span aria-hidden="true">↗</span></button></div>
          </article>
          <article class="neighborhood-card">
            <img src="https://picsum.photos/id/1040/650/750" alt="Green landscape and peaceful outdoor surroundings" loading="lazy" width="650" height="750">
            <div class="neighborhood-content"><div class="photo-kicker">River trails · Small-town spirit</div><h3>Sellwood–Moreland</h3><p>Vintage shops, riverfront paths, and easygoing residential streets. Space to breathe without losing your connection to the city.</p><button data-neighborhood="Sellwood–Moreland">Explore Sellwood <span aria-hidden="true">↗</span></button></div>
          </article>
        </div>
        <div class="neighborhood-details">
          <p><strong>Built around your everyday life.</strong> We help you compare commute times, transit connections, nearby amenities, and the range of available property styles—not just what’s inside the front door.</p>
          <p><strong>Explore with a local.</strong> Your priorities lead the way. We’ll share practical insights, suggest walking routes, and point you toward official school, planning, and transportation resources for your own research.</p>
        </div>
      </div>
    </section>

    <section class="section seller" id="seller" aria-labelledby="seller-heading">
      <div class="container seller-grid">
        <div class="seller-copy">
          <div class="eyebrow">For your next beginning</div>
          <h2 id="seller-heading">Your home has a story.<br>Let’s tell it well.</h2>
          <p>Selling isn’t just putting a sign in the yard. It’s finding the right listing price, making a confident first impression, and knowing what comes next. We bring a clear strategy and a calm presence to every step.</p>
          <p>From your first comparative market analysis to the final closing statement, you’ll get candid advice, considered marketing, and a dedicated advocate—not a handoff to someone you’ve never met.</p>
          <button class="button light" data-inquiry="Get my personalized home valuation" data-valuation="true">Get my home valuation <span class="arrow" aria-hidden="true">↗</span></button>
          <p class="seller-note">A personal market assessment. No obligation. No automated guesswork.</p>
        </div>
        <div class="seller-steps">
          <article class="seller-step"><span class="step-number">01 /</span><div><h3>Price with purpose.</h3><p>We study recent comparable sales, current competition, square footage, condition, and buyer demand to recommend a listing price grounded in your market—not wishful thinking.</p></div></article>
          <article class="seller-step"><span class="step-number">02 /</span><div><h3>Make the right first impression.</h3><p>A practical preparation plan, professional photography, thoughtful staging guidance, and targeted exposure help buyers understand what makes your home worth a closer look.</p></div></article>
          <article class="seller-step"><span class="step-number">03 /</span><div><h3>Move forward with clarity.</h3><p>We evaluate the whole offer, including financing, earnest money, inspection contingencies, and closing timelines. You stay informed while we coordinate the details.</p></div></article>
        </div>
      </div>
    </section>

    <section class="section" id="calculator" aria-labelledby="calculator-heading">
      <div class="container calculator-grid">
        <div class="calculator-copy">
          <div class="eyebrow">A little clarity goes a long way</div>
          <h2 id="calculator-heading">Dream big.<br>Plan comfortably.</h2>
          <p>A home should fit your life—and your monthly budget. Use our mortgage calculator to explore how your purchase price, down payment, and interest rate affect estimated principal and interest.</p>
          <p>This is a starting point, not a pre-approval. A trusted lender can review your income, credit, and debt-to-income ratio to help you understand your actual borrowing options.</p>
          <ul class="checklist"><li>Explore different price and down payment scenarios</li><li>Leave room for taxes, insurance, maintenance, and HOA dues</li><li>Get clarity before making a competitive offer</li></ul>
          <button class="text-link" style="background:none;border-top:0;border-left:0;border-right:0;cursor:pointer" data-inquiry="Connect me with a mortgage specialist">Talk through my options <span aria-hidden="true">↗</span></button>
        </div>
        <div class="calculator-card">
          <h3 class="calculator-title">Make the numbers feel less mysterious.</h3>
          <form id="mortgage-form">
            <div class="calc-fields">
              <div class="field"><label for="home-price">Home price ($)</label><input id="home-price" type="number" min="10000" max="100000000" step="1000" value="650000" required></div>
              <div class="field"><label for="down-payment">Down payment (%)</label><input id="down-payment" type="number" min="0" max="100" step="0.5" value="20" required></div>
              <div class="field"><label for="interest-rate">Interest rate (%)</label><input id="interest-rate" type="number" min="0" max="30" step="0.01" value="6.5" required></div>
              <div class="field"><label for="loan-term">Loan term</label><select id="loan-term"><option value="30">30 years</option><option value="20">20 years</option><option value="15">15 years</option></select></div>
            </div>
            <p class="calc-error" id="calc-error" role="status" hidden>Please enter a valid price, down payment (0–100%), and rate (0–30%).</p>
            <div class="estimate" aria-live="polite" aria-atomic="true">
              <div><div class="estimate-label">Estimated principal & interest</div><div class="estimate-value"><output id="payment" for="home-price down-payment interest-rate loan-term">$3,287</output><span> / month</span></div></div>
              <span class="estimate-mark" aria-hidden="true">⌂</span>
            </div>
            <div class="calc-breakdown"><span>Down payment: <strong id="down-amount">$130,000</strong></span><span>Loan amount: <strong id="loan-amount">$520,000</strong></span></div>
            <p class="calc-disclaimer">Illustrative fixed-rate estimate only. Excludes property taxes, homeowners insurance, mortgage insurance, HOA dues, and closing costs. The example rate is not a current rate quote or loan offer. Actual terms depend on lender approval.</p>
          </form>
        </div>
      </div>
    </section>

    <section class="section about" id="about" aria-labelledby="about-heading">
      <div class="container about-grid">
        <div class="about-image">
          <img src="https://picsum.photos/id/1031/850/750" alt="Portland-inspired architectural scene in warm natural light" loading="lazy" width="850" height="750">
          <div class="about-caption"><div><strong>Your neighbors. Your advocates.</strong><span>Independent by choice. Local at heart.</span></div><span style="font-size:25px;color:var(--ink)" aria-hidden="true">✳</span></div>
        </div>
        <div class="about-copy">
          <div class="eyebrow">Real estate, with a little more care</div>
          <h2 id="about-heading">Less transaction.<br>More connection.</h2>
          <p>We’re a small, independent team of Portland real estate professionals who believe a good move starts with a good conversation. We listen before we recommend, explain before you sign, and stay close long after the keys change hands.</p>
          <p>Whether you’re buying your first condo, renting while you explore, or selling the home you’ve grown into, our approach stays the same: honest guidance, local knowledge, and room for your questions.</p>
          <button class="text-link" style="background:none;border-top:0;border-left:0;border-right:0;cursor:pointer" data-inquiry="Meet my Alder & Acre agent">Meet your next advocate <span aria-hidden="true">↗</span></button>
          <div class="testimonial">
            <blockquote>“They never pushed us toward a house. They helped us understand what we wanted in a home. That difference meant everything.”</blockquote>
            <div class="testimonial-person">
              <img src="https://i.pravatar.cc/80?u=alder-testimonial" alt="Portrait of client Jamie" loading="lazy" width="37" height="37">
              <div><strong>Jamie & Alex</strong><span>First-time buyers · Northeast Portland</span></div>
              <div class="testimonial-stars" aria-label="5 out of 5 stars">★★★★★</div>
            </div>
          </div>
        </div>
      </div>
    </section>

    <section class="section faq" aria-labelledby="faq-heading">
      <div class="container faq-grid">
        <div class="faq-intro"><div class="eyebrow">Good questions welcome</div><h2 id="faq-heading">Let’s clear a few things up.</h2><p>No question is too small. Here are a few things we often talk through with people planning their next move.</p><button class="text-link" style="background:none;border-top:0;border-left:0;border-right:0;cursor:pointer" data-inquiry="I have a real estate question">Ask us anything <span aria-hidden="true">↗</span></button></div>
        <div>
          <details open><summary>Where should I start as a first-time buyer?</summary><p>Start with a comfortable monthly budget, then speak with a lender about pre-approval. We’ll help you identify your priorities, understand buyer representation, and compare neighborhoods before touring. When you find a home, we’ll walk through the offer, earnest money deposit, inspection period, and closing costs so you know what you’re committing to.</p></details>
          <details><summary>How much should I budget beyond my down payment?</summary><p>Closing costs often fall around 2–5% of the purchase price, though they vary by loan type and transaction. Plan separately for inspections, moving expenses, and an emergency maintenance fund. Your lender’s Loan Estimate provides a more precise breakdown, including prepaid taxes and insurance.</p></details>
          <details><summary>What is earnest money, and is it refundable?</summary><p>Earnest money is a good-faith deposit that is usually held in escrow and applied toward your purchase at closing. Whether it can be refunded depends on your contract, contingencies, and deadlines. We’ll review those conditions with you before you submit an offer; don’t assume every deposit is automatically refundable.</p></details>
          <details><summary>Should I make improvements before listing?</summary><p>Not every renovation pays off. We typically start with deferred maintenance, deep cleaning, decluttering, and small presentation improvements. After reviewing your property and nearby comparable sales, we’ll recommend a focused preparation plan and discuss the likely tradeoffs before you spend.</p></details>
          <details><summary>Can you help if I’m relocating to Portland?</summary><p>Absolutely. We can organize virtual tours, compare practical neighborhood details, and coordinate an efficient in-person visit. Tell us about your timeline, commute, and housing needs, and we’ll help you build a shortlist. We also assist with rental searches when you’d prefer to get to know the city before buying.</p></details>
        </div>
      </div>
    </section>

    <div class="container" id="contact">
      <section class="contact-banner" aria-labelledby="contact-heading">
        <div><h2 id="contact-heading">Every good move starts<br>with a conversation.</h2><p>Big plans, small questions, or just exploring what’s next—we’re here for it. Tell us a little about your next chapter.</p></div>
        <button class="button" data-inquiry="Let's plan my next chapter">Let’s find your next chapter <span class="arrow" aria-hidden="true">↗</span></button>
      </section>
    </div>
  </main>

  <footer class="footer">
    <div class="container">
      <div class="footer-main">
        <div class="footer-intro">
          <a class="brand" href="#"><img src="https://placehold.co/84x84/e1efb0/253d32?text=A%26A&font=playfair%20display" alt="Alder & Acre logo" width="42" height="42" loading="lazy"><div><div class="brand-name">alder & acre.</div><div class="brand-tagline">A BETTER PLACE TO PUT DOWN ROOTS.</div></div></a>
          <p>Thoughtful real estate for the place we call home. Serving Portland and its surrounding communities with care, clarity, and local perspective.</p>
          <div class="socials"><a href="https://www.instagram.com/" target="_blank" rel="noopener noreferrer" aria-label="Instagram (opens in new tab)">Instagram ↗</a><a href="https://www.linkedin.com/" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn (opens in new tab)">LinkedIn ↗</a><a href="https://www.facebook.com/" target="_blank" rel="noopener noreferrer" aria-label="Facebook (opens in new tab)">Facebook ↗</a></div>
        </div>
        <div><h3>Your next move</h3><nav class="footer-links" aria-label="Property links"><a href="#listings" data-nav-mode="buy">Buy a home</a><a href="#seller">Sell your home</a><a href="#listings" data-nav-mode="rent">Find a rental</a><a href="#neighborhoods">Neighborhood guides</a><a href="#calculator">Mortgage calculator</a></nav></div>
        <div><h3>A little about us</h3><nav class="footer-links" aria-label="Company links"><a href="#about">Our approach</a><a href="#about">Our people</a><a href="#seller">Seller guide</a><a href="#faq-heading">Common questions</a><a href="#contact">Get in touch</a></nav></div>
        <div class="footer-contact"><h3>Say hello</h3><address>214 NW Alder Avenue, Suite 200<br>Portland, OR 97209<br>Monday–Friday, 9am–5pm<br>Weekend tours by appointment</address><a href="tel:+15035550148">(503) 555-0148</a><a href="mailto:hello@alderandacre.example">hello@alderandacre.example</a></div>
      </div>
      <div class="footer-bottom"><span>© <span id="year">2026</span> Alder & Acre Realty. All rights reserved.</span><div class="legal-links"><button data-legal="privacy">Privacy</button><button data-legal="terms">Terms</button><span>⌂ Equal Housing Opportunity</span></div></div>
      <p class="legal-note">Alder & Acre is a fictional brokerage created for this demonstration. Properties, addresses, testimonials, and business figures are illustrative; images are placeholders, not photographs of the listed properties. We welcome all clients and support fair housing. Information is not legal, tax, or lending advice.</p>
    </div>
  </footer>

  <dialog id="modal" aria-labelledby="modal-title">
    <div class="modal-header"><h2 id="modal-title">Let’s talk.</h2><button class="modal-close" aria-label="Close dialog" type="button">×</button></div>
    <div class="modal-body" id="modal-body"></div>
  </dialog>
  <div class="toast" id="toast" role="status" hidden></div>

  <script>
    (() => {
      const properties = [
        {id:1,mode:'buy',price:725000,beds:3,baths:2,sqft:1840,address:'3428 NE Glisan Street',area:'Laurelhurst',zip:'97232',type:'Craftsman',badge:'Just listed',image:164,description:'Original millwork meets a refreshed kitchen, with a welcoming front porch and a private garden for slow Sunday mornings.',detail:'This thoughtfully updated Craftsman offers hardwood floors, generous living spaces, and a landscaped rear garden. The main-level kitchen opens to a bright dining area; upstairs bedrooms provide flexible space for a home office. Approximate square footage is 1,840; buyers should independently verify measurements, property condition, and permitted improvements.'},
        {id:2,mode:'buy',price:589000,beds:2,baths:2,sqft:1420,address:'1925 NE Alberta Street',area:'Alberta Arts',zip:'97211',type:'Townhome',badge:'Open house · Sun 1–3',image:1067,description:'Clean lines, light-filled rooms, and an easy-care footprint. A modern home close to the neighborhood’s creative heart.',detail:'A modern townhome with an open-plan living area, two bedrooms, and a dedicated entry-level flex space. Large windows and contemporary finishes keep the interior feeling airy. Approximate square footage is 1,420. Ask your agent about ownership structure, any HOA obligations, and current open-house availability before visiting.'},
        {id:3,mode:'buy',price:849000,beds:4,baths:2.5,sqft:2360,address:'7814 SE 17th Avenue',area:'Sellwood–Moreland',zip:'97202',type:'Single family',badge:'Room to grow',image:1031,description:'Generous gathering spaces, a flexible fourth bedroom, and a leafy backyard. Everyday comfort with room for what’s next.',detail:'A spacious single-family home with four bedrooms, an inviting dining room, and outdoor space for entertaining or gardening. A flexible fourth bedroom can accommodate a study or guest room. Approximate square footage is 2,360. All property details, boundaries, disclosures, and listing terms require verification.'},
        {id:4,mode:'rent',price:2450,beds:2,baths:1,sqft:1050,address:'2810 NE Couch Street',area:'Laurelhurst',zip:'97232',type:'Apartment',badge:'Available to tour',image:164,description:'A bright two-bedroom apartment with classic details and a shared courtyard, moments from neighborhood amenities.',detail:'Illustrative two-bedroom rental with approximately 1,050 square feet and a shared outdoor courtyard. Listed rent excludes utilities. Ask about deposits, lease length, pet policy, accessibility, and application criteria. Availability and fees must be confirmed before applying.'},
        {id:5,mode:'rent',price:3100,beds:3,baths:2,sqft:1560,address:'4632 NE 24th Avenue',area:'Alberta Arts',zip:'97211',type:'Townhome',badge:'New rental',image:1067,description:'An easygoing three-bedroom townhome with open living space, modern finishes, and a private outdoor patio.',detail:'Illustrative three-bedroom townhome offering approximately 1,560 square feet. A private patio complements the open living and dining areas. The quoted monthly rent excludes utilities and possible fees. Lease terms, screening criteria, parking, and pet policies are available upon request.'},
        {id:6,mode:'rent',price:2800,beds:2,baths:2,sqft:1280,address:'1635 SE Tacoma Street',area:'Sellwood–Moreland',zip:'97202',type:'Apartment',badge:'River-side living',image:1031,description:'Comfortable proportions, a private balcony, and nearby walking paths. A welcoming base for getting to know Portland.',detail:'Illustrative apartment with two bedrooms, two bathrooms, and approximately 1,280 square feet. A balcony adds an outdoor retreat. Please confirm lease terms, deposits, utility responsibilities, building amenities, accessibility, and availability with the leasing representative.'}
      ];
      const money = n => new Intl.NumberFormat('en-US',{style:'currency',currency:'USD',maximumFractionDigits:0}).format(n);
      const grid = document.getElementById('listing-grid');
      const feedback = document.getElementById('search-feedback');
      let mode='buy', saved=new Set();
      try { saved=new Set(JSON.parse(localStorage.getItem('alder-saved') || '[]')); } catch (_) {}
      const toast=document.getElementById('toast'); let toastTimer;
      function notify(message){toast.textContent=message;toast.hidden=false;clearTimeout(toastTimer);toastTimer=setTimeout(()=>toast.hidden=true,3500);}
      function render(search=false){
        const query=document.getElementById('location').value.trim().toLowerCase();
        const max=Number(document.getElementById('max-price').value)||Infinity;
        const beds=Number(document.getElementById('beds').value);
        const matches=properties.filter(p=>p.mode===mode&&p.price<=max&&p.beds>=beds&&(!query||`${p.address} ${p.area} ${p.zip} Portland`.toLowerCase().includes(query)));
        grid.innerHTML=matches.map(p=>`<article class="property-card">
          <div class="property-image"><img src="https://picsum.photos/id/${p.image}/760/530" alt="Illustrative architecture for ${p.area}; not the listed property" loading="lazy" width="760" height="530">
          <span class="badge ${p.id===1||p.id===4?'green':''}">${p.badge}</span><button class="save-button" data-save="${p.id}" aria-pressed="${saved.has(p.id)}" aria-label="${saved.has(p.id)?'Unsave':'Save'} ${p.address}">${saved.has(p.id)?'♥':'♡'}</button></div>
          <div class="property-body"><div class="price-row"><div class="price">${money(p.price)}${p.mode==='rent'?'<span style="font-size:12px;font-weight:400"> / mo</span>':''}</div><span class="property-type">${p.type}</span></div>
          <h3>${p.address}</h3><p class="property-location">${p.area} · Portland, OR ${p.zip}</p>
          <div class="property-specs"><span>${p.beds} beds</span><span>·</span><span>${p.baths} baths</span><span>·</span><span>${p.sqft.toLocaleString()} sq ft</span></div>
          <p class="property-description">${p.description}</p><div class="property-actions"><button data-detail="${p.id}">View details <span aria-hidden="true">↗</span></button><button data-tour="${p.id}">Schedule tour →</button></div></div></article>`).join('');
        feedback.hidden=!search;
        feedback.textContent=matches.length?`${matches.length} ${mode==='buy'?'homes for sale':'rentals'} match your search.`:'No homes match this search. Try a broader location, a higher budget, or fewer bedrooms.';
        if(!matches.length){grid.innerHTML='<div style="grid-column:1/-1;background:white;border:1px solid var(--line);padding:30px;border-radius:12px"><h3>Let’s widen the possibilities.</h3><p style="margin:12px 0 20px;color:var(--muted)">Our collection is intentionally small. Reset the filters to explore all available examples, or tell us what you’re looking for.</p><button class="button outline" id="reset-search">Reset search ↗</button></div>';document.getElementById('reset-search').onclick=()=>{document.getElementById('search-form').reset();render(true);};}
      }
      function setMode(next){
        mode=next;
        document.querySelectorAll('[data-mode]').forEach(b=>{b.classList.toggle('active',b.dataset.mode===mode);b.setAttribute('aria-pressed',String(b.dataset.mode===mode));});
        const select=document.getElementById('max-price');
        select.innerHTML=mode==='buy'?'<option value="">Any price</option><option value="600000">Up to $600,000</option><option value="800000">Up to $800,000</option><option value="1000000">Up to $1,000,000</option>':'<option value="">Any monthly rent</option><option value="2500">Up to $2,500 / month</option><option value="3000">Up to $3,000 / month</option><option value="3500">Up to $3,500 / month</option>';
        render(true);
      }
      document.querySelectorAll('[data-mode]').forEach(b=>b.addEventListener('click',()=>setMode(b.dataset.mode)));
      document.querySelectorAll('[data-nav-mode]').forEach(a=>a.addEventListener('click',()=>{document.getElementById('search-form').reset();setMode(a.dataset.navMode);}));
      document.getElementById('search-form').addEventListener('submit',e=>{e.preventDefault();render(true);document.getElementById('listings').scrollIntoView({behavior:window.matchMedia('(prefers-reduced-motion: reduce)').matches?'instant':'smooth'});});
      const menu=document.querySelector('.menu-toggle'),nav=document.getElementById('primary-nav');
      menu.addEventListener('click',()=>{const open=menu.getAttribute('aria-expanded')!=='true';menu.setAttribute('aria-expanded',String(open));menu.setAttribute('aria-label',open?'Close navigation':'Open navigation');nav.classList.toggle('open',open);});
      nav.querySelectorAll('a').forEach(a=>a.addEventListener('click',()=>{menu.setAttribute('aria-expanded','false');menu.setAttribute('aria-label','Open navigation');nav.classList.remove('open');}));
      document.addEventListener('keydown',e=>{if(e.key==='Escape'){nav.classList.remove('open');menu.setAttribute('aria-expanded','false');menu.setAttribute('aria-label','Open navigation');}});
      const modal=document.getElementById('modal'),body=document.getElementById('modal-body'),title=document.getElementById('modal-title');
      function openModal(heading,html){title.textContent=heading;body.innerHTML=html;if(!modal.open)modal.showModal();}
      document.querySelector('.modal-close').onclick=()=>modal.close();
      modal.addEventListener('click',e=>{if(e.target===modal){const r=modal.getBoundingClientRect();if(e.clientX<r.left||e.clientX>r.right||e.clientY<r.top||e.clientY>r.bottom)modal.close();}});
      function inquiry(subject,valuation=false){
        openModal(valuation?'What’s your home worth?':'Let’s plan your next move.',`<p>${valuation?'Share a few details so we can prepare a thoughtful, property-specific assessment.':'A good conversation is the first step. Tell us how we can help, and choose your ideal timeline.'}</p>
          <p style="font-size:11px;background:var(--soft);padding:10px 12px;border-radius:5px"><strong>Demo preview:</strong> This form does not send or store personal information. Use sample details to explore the experience.</p>
          <form id="inquiry-form"><div class="field"><label for="inquiry-name">Your name</label><input id="inquiry-name" name="name" autocomplete="name" placeholder="Alex Morgan" required maxlength="100"></div>
          <div class="field"><label for="inquiry-email">Email address</label><input id="inquiry-email" name="email" type="email" autocomplete="email" placeholder="alex@example.com" required maxlength="150"></div>
          ${valuation?'<div class="field"><label for="inquiry-address">Property address</label><input id="inquiry-address" name="address" autocomplete="street-address" placeholder="Street address, city, and ZIP" required maxlength="200"></div>':''}
          <div class="field"><label for="inquiry-timeline">Your timeline</label><select id="inquiry-timeline"><option>Just exploring</option><option>Within 3 months</option><option>3–6 months</option><option>6+ months</option></select></div>
          <div class="field"><label for="inquiry-message">What’s on your mind?</label><textarea id="inquiry-message" rows="3" maxlength="2000"></textarea></div>
          <p class="consent">For a live inquiry, please contact the brokerage directly. This is a fictional website; no agent will receive this preview.</p>
          <button class="button" type="submit">Preview my request <span aria-hidden="true">↗</span></button></form>`);
        document.getElementById('inquiry-message').value=subject;
        document.getElementById('inquiry-form').addEventListener('submit',e=>{e.preventDefault();body.innerHTML='<div class="success-message"><h3>Your request preview is complete.</h3><p>In a live website, this is where your request would be securely delivered to an agent. Nothing was sent or saved in this demo.</p><p>Thanks for exploring Alder & Acre.</p></div><button class="button" id="done-button" style="margin-top:20px">Back to exploring ↗</button>';document.getElementById('done-button').onclick=()=>modal.close();document.getElementById('done-button').focus();});
      }
      document.addEventListener('click',e=>{
        const inquiryButton=e.target.closest('[data-inquiry]');
        if(inquiryButton)inquiry(inquiryButton.dataset.inquiry,inquiryButton.dataset.valuation==='true');
        const save=e.target.closest('[data-save]');
        if(save){const id=Number(save.dataset.save);saved.has(id)?saved.delete(id):saved.add(id);try{localStorage.setItem('alder-saved',JSON.stringify([...saved]));}catch(_){}save.setAttribute('aria-pressed',String(saved.has(id)));save.setAttribute('aria-label',`${saved.has(id)?'Unsave':'Save'} ${properties.find(p=>p.id===id).address}`);save.textContent=saved.has(id)?'♥':'♡';notify(saved.has(id)?'Home saved on this device.':'Home removed from your saved list.');}
        const detail=e.target.closest('[data-detail]');
        if(detail){const p=properties.find(p=>p.id===Number(detail.dataset.detail));openModal(p.address,`<img class="modal-image" src="https://picsum.photos/id/${p.image}/900/500" alt="Illustrative architecture; not the listed property"><div class="price" style="margin-bottom:8px">${money(p.price)}${p.mode==='rent'?' / month':''}</div><div class="modal-specs">${p.area} · ${p.beds} beds · ${p.baths} baths · ${p.sqft.toLocaleString()} sq ft</div><p>${p.detail}</p><p style="font-size:10px">Demo property. Images, listing details, availability, and pricing are illustrative, not a live MLS listing.</p><button class="button" data-tour="${p.id}">Schedule a tour ↗</button>`);}
        const tour=e.target.closest('[data-tour]');
        if(tour){const p=properties.find(p=>p.id===Number(tour.dataset.tour));inquiry(`I'd like to tour ${p.address} in ${p.area}. Please help me choose a date and time.`);}
        const neighborhood=e.target.closest('[data-neighborhood]');
        if(neighborhood){
          const name=neighborhood.dataset.neighborhood;
          const guides={
            'Laurelhurst':'Look for early-twentieth-century Craftsman and traditional homes, mature landscaping, and access to Laurelhurst Park. Housing condition can vary significantly: review foundations, roofing, sewer lines, and the history of renovations. Explore local walking routes and visit at different times of day to understand traffic and your commute.',
            'Alberta Arts':'Explore a mix of classic bungalows, newer infill homes, and townhomes near independent restaurants, galleries, and shops. Consider the tradeoff between proximity to commercial activity and quieter residential blocks. Check parking, transit routes, outdoor space, and any shared maintenance or HOA arrangements.',
            'Sellwood–Moreland':'Discover historic houses, apartments, and newer homes near parks, independent shops, and riverfront recreation. Compare commute routes and investigate property-specific flood information with official city and federal resources. Lot size, building age, and access to outdoor space vary throughout the neighborhood.'
          };
          openModal(`${name}, at a glance.`,`<p>${guides[name]}</p><h3 style="font-size:17px;margin-bottom:12px">Make it your own shortlist.</h3><p>Tell us which everyday amenities, home features, and commute connections matter most. We’ll help you compare options without making assumptions about where you belong.</p><button class="button" id="browse-neighborhood">Explore neighborhood homes ↗</button>`);
          document.getElementById('browse-neighborhood').onclick=()=>{modal.close();document.getElementById('location').value=name;document.getElementById('beds').value='0';document.getElementById('max-price').value='';render(true);document.getElementById('listings').scrollIntoView();};
        }
        const legal=e.target.closest('[data-legal]');
        if(legal){
          if(legal.dataset.legal==='privacy')openModal('Privacy, in plain language.','<p>This demonstration has no backend and does not send your search queries, calculator inputs, or form details to Alder & Acre. Saved property IDs are stored locally in your browser so your favorites remain on this device.</p><p>Photography, avatars, and fonts load from external providers, including Picsum, Pravatar, Placehold.co, and Google Fonts. Those services may receive standard connection information such as your IP address and browser headers under their own privacy policies.</p><p>To clear saved homes, remove this site’s browser storage. Do not enter sensitive or personal information into the demonstration forms.</p>');
          else openModal('Website terms.','<p>This is a fictional real estate website for demonstration purposes. No property shown is offered for sale or rent through this page. Addresses, prices, testimonials, business details, and statistics are illustrative.</p><p>The mortgage calculator provides a mathematical estimate of fixed-rate principal and interest, not a lending offer or pre-approval. Taxes, insurance, mortgage insurance, HOA fees, and other expenses are excluded.</p><p>Do not rely on this demonstration for a financial, legal, or housing decision. Consult appropriately licensed professionals and independently verify live property information. External links are provided for convenience and do not represent an endorsement or verified brokerage account.</p>');
        }
      });
      const mortgage=document.getElementById('mortgage-form');
      function calculate(){
        const price=Number(document.getElementById('home-price').value),down=Number(document.getElementById('down-payment').value),rate=Number(document.getElementById('interest-rate').value),years=Number(document.getElementById('loan-term').value);
        const valid=[...mortgage.querySelectorAll('input')].every(i=>i.value!==''&&i.checkValidity());
        document.getElementById('calc-error').hidden=valid;
        if(!valid){document.getElementById('payment').value='—';document.getElementById('down-amount').textContent='—';document.getElementById('loan-amount').textContent='—';return;}
        const principal=price*(1-down/100),r=rate/1200,n=years*12;
        const payment=principal===0?0:r===0?principal/n:principal*r/(1-Math.pow(1+r,-n));
        document.getElementById('payment').value=money(payment);
        document.getElementById('down-amount').textContent=money(price*down/100);
        document.getElementById('loan-amount').textContent=money(principal);
      }
      mortgage.addEventListener('input',calculate);mortgage.addEventListener('change',calculate);mortgage.addEventListener('submit',e=>e.preventDefault());
      document.getElementById('year').textContent=new Date().getFullYear();
      render();calculate();
    })();
  </script>
</body>
</html>
View Axe Report (JSON)
{
  "testEngine": {
    "name": "axe-core",
    "version": "4.10.2"
  },
  "testRunner": {
    "name": "axe"
  },
  "testEnvironment": {
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/156.0.8078.4 Safari/537.36",
    "windowWidth": 1280,
    "windowHeight": 720,
    "orientationAngle": 0,
    "orientationType": "landscape-primary"
  },
  "timestamp": "2026-11-12T09:58:44.907Z",
  "url": "https://benchmark.aimac.invalid/62ca9baaf2ddeb1e0be4a006081395e97a573ee091a5b3ba1c49be5b6f454802.html",
  "toolOptions": {
    "runOnly": {
      "type": "tag",
      "values": [
        "wcag2a",
        "wcag2aa",
        "wcag21a",
        "wcag21aa",
        "wcag22a",
        "wcag22aa"
      ]
    },
    "resultTypes": [
      "violations"
    ],
    "reporter": "v1"
  },
  "inapplicable": [
    {
      "id": "area-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <area> elements of image maps have alternative text",
      "help": "Active <area> elements must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/area-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-braille-equivalent",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-braillelabel and aria-brailleroledescription have a non-braille equivalent",
      "help": "aria-braille attributes must have a non-braille equivalent",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-braille-equivalent?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-command-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA button, link and menuitem has an accessible name",
      "help": "ARIA commands must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-command-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-input-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA input field has an accessible name",
      "help": "ARIA input fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-input-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-meter-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag111",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure every ARIA meter node has an accessible name",
      "help": "ARIA meter nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-meter-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-progressbar-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag111",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure every ARIA progressbar node has an accessible name",
      "help": "ARIA progressbar nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-progressbar-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-required-children",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure elements with an ARIA role that require child roles contain them",
      "help": "Certain ARIA roles must contain particular children",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-children?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-required-parent",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure elements with an ARIA role that require parent roles are contained by them",
      "help": "Certain ARIA roles must be contained by particular parents",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-parent?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-toggle-field-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every ARIA toggle field has an accessible name",
      "help": "ARIA toggle fields must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-toggle-field-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "aria-tooltip-name",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure every ARIA tooltip node has an accessible name",
      "help": "ARIA tooltip nodes must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-tooltip-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "autocomplete-valid",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag21aa",
        "wcag135",
        "EN-301-549",
        "EN-9.1.3.5",
        "ACT"
      ],
      "description": "Ensure the autocomplete attribute is correct and suitable for the form field",
      "help": "autocomplete attribute must be used correctly",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/autocomplete-valid?application=axeAPI",
      "nodes": []
    },
    {
      "id": "blink",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag222",
        "section508",
        "section508.22.j",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <blink> elements are not used",
      "help": "<blink> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/blink?application=axeAPI",
      "nodes": []
    },
    {
      "id": "definition-list",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dl> elements are structured correctly",
      "help": "<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/definition-list?application=axeAPI",
      "nodes": []
    },
    {
      "id": "dlitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <dt> and <dd> elements are contained by a <dl>",
      "help": "<dt> and <dd> elements must be contained by a <dl>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/dlitem?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-focusable-content",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure <frame> and <iframe> elements with focusable content do not have tabindex=-1",
      "help": "Frames with focusable content must not have tabindex=-1",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-focusable-content?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title-unique",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements contain a unique title attribute",
      "help": "Frames must have a unique title attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title-unique?application=axeAPI",
      "nodes": []
    },
    {
      "id": "frame-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.i",
        "TTv5",
        "TT12.d",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure <iframe> and <frame> elements have an accessible name",
      "help": "Frames must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/frame-title?application=axeAPI",
      "nodes": []
    },
    {
      "id": "html-xml-lang-mismatch",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page",
      "help": "HTML elements with lang and xml:lang must have the same base language",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-xml-lang-mismatch?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure input buttons have discernible text",
      "help": "Input buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-button-name?application=axeAPI",
      "nodes": []
    },
    {
      "id": "input-image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure <input type=\"image\"> elements have alternative text",
      "help": "Image buttons must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/input-image-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "marquee",
      "impact": null,
      "tags": [
        "cat.parsing",
        "wcag2a",
        "wcag222",
        "TTv5",
        "TT2.b",
        "EN-301-549",
        "EN-9.2.2.2"
      ],
      "description": "Ensure <marquee> elements are not used",
      "help": "<marquee> elements are deprecated and must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/marquee?application=axeAPI",
      "nodes": []
    },
    {
      "id": "meta-refresh",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag221",
        "TTv5",
        "TT8.a",
        "EN-301-549",
        "EN-9.2.2.1"
      ],
      "description": "Ensure <meta http-equiv=\"refresh\"> is not used for delayed refresh",
      "help": "Delayed refresh under 20 hours must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-refresh?application=axeAPI",
      "nodes": []
    },
    {
      "id": "object-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "EN-301-549",
        "EN-9.1.1.1"
      ],
      "description": "Ensure <object> elements have alternative text",
      "help": "<object> elements must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/object-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "role-img-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure [role=\"img\"] elements have alternative text",
      "help": "[role=\"img\"] elements must have an alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/role-img-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "scrollable-region-focusable",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag211",
        "wcag213",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1",
        "EN-9.2.1.3"
      ],
      "description": "Ensure elements that have scrollable content are accessible by keyboard",
      "help": "Scrollable region must have keyboard access",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/scrollable-region-focusable?application=axeAPI",
      "nodes": []
    },
    {
      "id": "server-side-image-map",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag211",
        "section508",
        "section508.22.f",
        "TTv5",
        "TT4.a",
        "EN-301-549",
        "EN-9.2.1.1"
      ],
      "description": "Ensure that server-side image maps are not used",
      "help": "Server-side image maps must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/server-side-image-map?application=axeAPI",
      "nodes": []
    },
    {
      "id": "svg-img-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text",
      "help": "<svg> elements with an img role must have an alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/svg-img-alt?application=axeAPI",
      "nodes": []
    },
    {
      "id": "td-headers-attr",
      "impact": null,
      "tags": [
        "cat.tables",
        "wcag2a",
        "wcag131",
        "section508",
        "section508.22.g",
        "TTv5",
        "TT14.b",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table",
      "help": "Table cells that use the headers attribute must only refer to cells in the same table",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/td-headers-attr?application=axeAPI",
      "nodes": []
    },
    {
      "id": "th-has-data-cells",
      "impact": null,
      "tags": [
        "cat.tables",
        "wcag2a",
        "wcag131",
        "section508",
        "section508.22.g",
        "TTv5",
        "TT14.b",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe",
      "help": "Table headers in a data table must refer to data cells",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/th-has-data-cells?application=axeAPI",
      "nodes": []
    },
    {
      "id": "valid-lang",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2aa",
        "wcag312",
        "TTv5",
        "TT11.b",
        "EN-301-549",
        "EN-9.3.1.2",
        "ACT"
      ],
      "description": "Ensure lang attributes have valid values",
      "help": "lang attribute must have a valid value",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/valid-lang?application=axeAPI",
      "nodes": []
    },
    {
      "id": "video-caption",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag122",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT17.a",
        "EN-301-549",
        "EN-9.1.2.2"
      ],
      "description": "Ensure <video> elements have captions",
      "help": "<video> elements must have captions",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/video-caption?application=axeAPI",
      "nodes": []
    },
    {
      "id": "no-autoplay-audio",
      "impact": null,
      "tags": [
        "cat.time-and-media",
        "wcag2a",
        "wcag142",
        "TTv5",
        "TT2.a",
        "EN-301-549",
        "EN-9.1.4.2",
        "ACT"
      ],
      "description": "Ensure <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio",
      "help": "<video> or <audio> elements must not play automatically",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/no-autoplay-audio?application=axeAPI",
      "nodes": []
    }
  ],
  "passes": [
    {
      "id": "aria-allowed-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure an element's role supports its ARIA attributes",
      "help": "Elements must only use supported ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-allowed-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-allowed-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attributes are used correctly for the defined role"
            }
          ],
          "none": [
            {
              "id": "aria-unsupported-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute is supported"
            }
          ],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#\" aria-label=\"Alder and Acre home\">",
          "target": [
            "a[aria-label=\"Alder and Acre home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-conditional-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are used as described in the specification of the element's role",
      "help": "ARIA attributes must be used as specified for the element's role",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-conditional-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-conditional-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "ARIA attribute is allowed"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#\" aria-label=\"Alder and Acre home\">",
          "target": [
            "a[aria-label=\"Alder and Acre home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-deprecated-role",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements do not use deprecated roles",
      "help": "Deprecated ARIA roles must not be used",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-deprecated-role?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "deprecatedrole",
              "data": null,
              "relatedNodes": [],
              "impact": "minor",
              "message": "ARIA role is not deprecated"
            }
          ],
          "impact": null,
          "html": "<div class=\"search-tabs\" role=\"group\" aria-label=\"Property search type\">",
          "target": [
            ".search-tabs"
          ]
        }
      ]
    },
    {
      "id": "aria-hidden-body",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag131",
        "wcag412",
        "EN-301-549",
        "EN-9.1.3.1",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-hidden=\"true\" is not present on the document body.",
      "help": "aria-hidden=\"true\" must not be present on the document body",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-body?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-hidden-body",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "No aria-hidden attribute is present on document body"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<body>",
          "target": [
            "body"
          ]
        }
      ]
    },
    {
      "id": "aria-hidden-focus",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure aria-hidden elements are not focusable nor contain focusable elements",
      "help": "ARIA hidden element must not be focusable or contain focusable elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-hidden-focus?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "focusable-modal-open",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements while a modal is open"
            },
            {
              "id": "focusable-disabled",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements contained within element"
            },
            {
              "id": "focusable-not-tabbable",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "No focusable elements contained within element"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<span class=\"arrow\" aria-hidden=\"true\">\u2197</span>",
          "target": [
            ".header-inner > .button > .arrow[aria-hidden=\"true\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-prohibited-attr",
      "impact": "serious",
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are not prohibited for an element's role",
      "help": "Elements must only use permitted ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "aria-prohibited-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "ARIA attribute is allowed"
            }
          ],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#\" aria-label=\"Alder and Acre home\">",
          "target": [
            "a[aria-label=\"Alder and Acre home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-required-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure elements with ARIA roles have all required ARIA attributes",
      "help": "Required ARIA attributes must be provided",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-required-attr?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-required-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "All required ARIA attributes are present"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<div class=\"search-tabs\" role=\"group\" aria-label=\"Property search type\">",
          "target": [
            ".search-tabs"
          ]
        }
      ]
    },
    {
      "id": "aria-roles",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure all elements with a role attribute use a valid value",
      "help": "ARIA roles used must conform to valid values",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-roles?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "invalidrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA role is valid"
            },
            {
              "id": "abstractrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Abstract roles are not used"
            },
            {
              "id": "unsupportedrole",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA role is supported"
            }
          ],
          "impact": null,
          "html": "<div class=\"search-tabs\" role=\"group\" aria-label=\"Property search type\">",
          "target": [
            ".search-tabs"
          ]
        }
      ]
    },
    {
      "id": "aria-valid-attr-value",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure all ARIA attributes have valid values",
      "help": "ARIA attributes must conform to valid values",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr-value?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "aria-valid-attr-value",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute values are valid"
            },
            {
              "id": "aria-errormessage",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique"
            },
            {
              "id": "aria-level",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "aria-level values are valid"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#\" aria-label=\"Alder and Acre home\">",
          "target": [
            "a[aria-label=\"Alder and Acre home\"]"
          ]
        }
      ]
    },
    {
      "id": "aria-valid-attr",
      "impact": null,
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure attributes that begin with aria- are valid ARIA attributes",
      "help": "ARIA attributes must conform to valid names",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-valid-attr?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "aria-valid-attr",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "ARIA attribute name is valid"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"brand\" href=\"#\" aria-label=\"Alder and Acre home\">",
          "target": [
            "a[aria-label=\"Alder and Acre home\"]"
          ]
        }
      ]
    },
    {
      "id": "avoid-inline-spacing",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag21aa",
        "wcag1412",
        "EN-301-549",
        "EN-9.1.4.12",
        "ACT"
      ],
      "description": "Ensure that text spacing set through style attributes can be adjusted with custom stylesheets",
      "help": "Inline text spacing must be adjustable with custom stylesheets",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/avoid-inline-spacing?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [
            {
              "id": "important-letter-spacing",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Letter-spacing in the style attribute is not set to !important, or meets the minimum"
            },
            {
              "id": "important-word-spacing",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "word-spacing in the style attribute is not set to !important, or meets the minimum"
            },
            {
              "id": "important-line-height",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "line-height in the style attribute is not set to !important, or meets the minimum"
            }
          ],
          "none": [],
          "impact": null,
          "html": "<span style=\"color:#869868\">.</span>",
          "target": [
            ".brand-name > span"
          ]
        }
      ]
    },
    {
      "id": "button-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure buttons have discernible text",
      "help": "Buttons must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/button-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "button-has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has inner text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<button class=\"button\" data-inquiry=\"Let's talk about your next move\">Let\u2019s talk <span class=\"arrow\" aria-hidden=\"true\">\u2197</span></button>",
          "target": [
            ".header-inner > .button"
          ]
        }
      ]
    },
    {
      "id": "bypass",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag241",
        "section508",
        "section508.22.o",
        "TTv5",
        "TT9.a",
        "EN-301-549",
        "EN-9.2.4.1"
      ],
      "description": "Ensure each page has at least one mechanism for a user to bypass navigation and jump straight to the content",
      "help": "Page must have means to bypass repeated blocks",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/bypass?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "internal-link-present",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Valid skip link found"
            },
            {
              "id": "header-present",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<h1 id=\"hero-heading\">Find your home.<br>Find <span>your people.</span></h1>",
                  "target": [
                    "#hero-heading"
                  ]
                },
                {
                  "html": "<h3>Room for your next chapter.</h3>",
                  "target": [
                    ".hero-photo-label > div > h3"
                  ]
                },
                {
                  "html": "<h2 id=\"listing-heading\">A few places to fall for.</h2>",
                  "target": [
                    "#listing-heading"
                  ]
                },
                {
                  "html": "<h3>3428 NE Glisan Street</h3>",
                  "target": [
                    ".property-card:nth-child(1) > .property-body > h3"
                  ]
                },
                {
                  "html": "<h3>1925 NE Alberta Street</h3>",
                  "target": [
                    ".property-card:nth-child(2) > .property-body > h3"
                  ]
                },
                {
                  "html": "<h3>7814 SE 17th Avenue</h3>",
                  "target": [
                    ".property-card:nth-child(3) > .property-body > h3"
                  ]
                },
                {
                  "html": "<h2 id=\"neighborhood-heading\">A home is only half the story.</h2>",
                  "target": [
                    "#neighborhood-heading"
                  ]
                },
                {
                  "html": "<h3>Laurelhurst</h3>",
                  "target": [
                    ".neighborhood-card:nth-child(1) > .neighborhood-content > h3"
                  ]
                },
                {
                  "html": "<h3>Alberta Arts</h3>",
                  "target": [
                    ".neighborhood-card:nth-child(2) > .neighborhood-content > h3"
                  ]
                },
                {
                  "html": "<h3>Sellwood\u2013Moreland</h3>",
                  "target": [
                    ".neighborhood-card:nth-child(3) > .neighborhood-content > h3"
                  ]
                },
                {
                  "html": "<h2 id=\"seller-heading\">Your home has a story.<br>Let\u2019s tell it well.</h2>",
                  "target": [
                    "#seller-heading"
                  ]
                },
                {
                  "html": "<h3>Price with purpose.</h3>",
                  "target": [
                    ".seller-step:nth-child(1) > div > h3"
                  ]
                },
                {
                  "html": "<h3>Make the right first impression.</h3>",
                  "target": [
                    ".seller-step:nth-child(2) > div > h3"
                  ]
                },
                {
                  "html": "<h3>Move forward with clarity.</h3>",
                  "target": [
                    ".seller-step:nth-child(3) > div > h3"
                  ]
                },
                {
                  "html": "<h2 id=\"calculator-heading\">Dream big.<br>Plan comfortably.</h2>",
                  "target": [
                    "#calculator-heading"
                  ]
                },
                {
                  "html": "<h3 class=\"calculator-title\">Make the numbers feel less mysterious.</h3>",
                  "target": [
                    ".calculator-title"
                  ]
                },
                {
                  "html": "<h2 id=\"about-heading\">Less transaction.<br>More connection.</h2>",
                  "target": [
                    "#about-heading"
                  ]
                },
                {
                  "html": "<h2 id=\"faq-heading\">Let\u2019s clear a few things up.</h2>",
                  "target": [
                    "#faq-heading"
                  ]
                },
                {
                  "html": "<h2 id=\"contact-heading\">Every good move starts<br>with a conversation.</h2>",
                  "target": [
                    "#contact-heading"
                  ]
                },
                {
                  "html": "<h3>Your next move</h3>",
                  "target": [
                    ".footer-main > div:nth-child(2) > h3"
                  ]
                },
                {
                  "html": "<h3>A little about us</h3>",
                  "target": [
                    "div:nth-child(3) > h3"
                  ]
                },
                {
                  "html": "<h3>Say hello</h3>",
                  "target": [
                    ".footer-contact > h3"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Page has a heading"
            },
            {
              "id": "landmark",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<main id=\"main\">",
                  "target": [
                    "#main"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Page has a landmark region"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#e7eddd",
                "bgColor": "#253d32",
                "contrastRatio": 9.79,
                "fontSize": "8.3pt (11px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has sufficient color contrast of 9.79"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<div class=\"topbar\">Good neighbors. Great homes. Locally rooted in Portland since 2012. <a href=\"#about\">Meet your people \u2197</a></div>",
          "target": [
            ".topbar"
          ]
        }
      ]
    },
    {
      "id": "document-title",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag242",
        "TTv5",
        "TT12.a",
        "EN-301-549",
        "EN-9.2.4.2",
        "ACT"
      ],
      "description": "Ensure each HTML document contains a non-empty <title> element",
      "help": "Documents must have <title> element to aid in navigation",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "doc-has-title",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Document has a non-empty <title> element"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "duplicate-id-aria",
      "impact": null,
      "tags": [
        "cat.parsing",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure every id attribute value used in ARIA and in labels is unique",
      "help": "IDs used in ARIA and labels must be unique",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/duplicate-id-aria?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "duplicate-id-aria",
              "data": "primary-nav",
              "relatedNodes": [],
              "impact": "critical",
              "message": "Document has no elements referenced with ARIA or labels that share the same id attribute"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<nav class=\"nav\" id=\"primary-nav\" aria-label=\"Primary navigation\">",
          "target": [
            "#primary-nav"
          ]
        }
      ]
    },
    {
      "id": "form-field-multiple-labels",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag332",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.3.3.2"
      ],
      "description": "Ensure form field does not have multiple label elements",
      "help": "Form field must not have multiple label elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/form-field-multiple-labels?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "multiple-label",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<label for=\"location\">Where feels like home?</label>",
                  "target": [
                    "label[for=\"location\"]"
                  ]
                }
              ],
              "impact": "moderate",
              "message": "Form field does not have multiple label elements"
            }
          ],
          "impact": null,
          "html": "<input id=\"location\" name=\"location\" type=\"search\" placeholder=\"Neighborhood, address, or ZIP\">",
          "target": [
            "#location"
          ]
        }
      ]
    },
    {
      "id": "html-has-lang",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "TTv5",
        "TT11.a",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure every HTML document has a lang attribute",
      "help": "<html> element must have a lang attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-lang",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "The <html> element has a lang attribute"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "html-lang-valid",
      "impact": null,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "TTv5",
        "TT11.a",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ],
      "description": "Ensure the lang attribute of the <html> element has a valid value",
      "help": "<html> element must have a valid value for the lang attribute",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/html-lang-valid?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "valid-lang",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Value of lang attribute is included in the list of valid languages"
            }
          ],
          "impact": null,
          "html": "<html lang=\"en\">",
          "target": [
            "html"
          ]
        }
      ]
    },
    {
      "id": "image-alt",
      "impact": null,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag111",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT7.a",
        "TT7.b",
        "EN-301-549",
        "EN-9.1.1.1",
        "ACT"
      ],
      "description": "Ensure <img> elements have alternative text or a role of none or presentation",
      "help": "Images must have alternative text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/image-alt?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-alt",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has an alt attribute"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "alt-space-value",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has a valid alt attribute value"
            }
          ],
          "impact": null,
          "html": "<img src=\"https://placehold.co/84x84/253d32/e1efb0?text=A%26A&amp;font=playfair%20display\" alt=\"Alder &amp; Acre logo\" width=\"42\" height=\"42\">",
          "target": [
            "a[aria-label=\"Alder and Acre home\"] > img[alt=\"Alder & Acre logo\"][width=\"42\"][height=\"42\"]"
          ]
        }
      ]
    },
    {
      "id": "label",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure every form element has a label",
      "help": "Form elements must have labels",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/label?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "explicit-label",
              "data": {
                "explicitLabel": "Where feels like home?"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"location\">Where feels like home?</label>",
                  "target": [
                    "label[for=\"location\"]"
                  ]
                }
              ],
              "impact": "critical",
              "message": "Element has an explicit <label>"
            },
            {
              "id": "non-empty-placeholder",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Element has a placeholder attribute"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "hidden-explicit-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Form element has a visible explicit <label>"
            }
          ],
          "impact": null,
          "html": "<input id=\"location\" name=\"location\" type=\"search\" placeholder=\"Neighborhood, address, or ZIP\">",
          "target": [
            "#location"
          ]
        }
      ]
    },
    {
      "id": "link-in-text-block",
      "impact": null,
      "tags": [
        "cat.color",
        "wcag2a",
        "wcag141",
        "TTv5",
        "TT13.a",
        "EN-301-549",
        "EN-9.1.4.1"
      ],
      "description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
      "help": "Links must be distinguishable without relying on color",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "link-in-text-block",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<div class=\"topbar\">Good neighbors. Great homes. Locally rooted in Portland since 2012. <a href=\"#about\">Meet your people \u2197</a></div>",
                  "target": [
                    ".topbar"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text in some way other than by color"
            },
            {
              "id": "link-in-text-block-style",
              "data": null,
              "relatedNodes": [
                {
                  "html": "<div class=\"topbar\">Good neighbors. Great homes. Locally rooted in Portland since 2012. <a href=\"#about\">Meet your people \u2197</a></div>",
                  "target": [
                    ".topbar"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Links can be distinguished from surrounding text by visual styling"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a href=\"#about\">Meet your people \u2197</a>",
          "target": [
            ".topbar > a[href$=\"#about\"]"
          ]
        }
      ]
    },
    {
      "id": "link-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag244",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.2.4.4",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure links have discernible text",
      "help": "Links must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "focusable-no-name",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element is not in tab order or has accessible text"
            }
          ],
          "impact": null,
          "html": "<a class=\"skip-link\" href=\"#main\">Skip to content</a>",
          "target": [
            ".skip-link"
          ]
        }
      ]
    },
    {
      "id": "list",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure that lists are structured correctly",
      "help": "<ul> and <ol> must only directly contain <li>, <script> or <template> elements",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/list?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "only-listitems",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "List element only has direct children that are allowed inside <li> elements"
            }
          ],
          "impact": null,
          "html": "<ul class=\"checklist\"><li>Explore different price and down payment scenarios</li><li>Leave room for taxes, insurance, maintenance, and HOA dues</li><li>Get clarity before making a competitive offer</li></ul>",
          "target": [
            "ul"
          ]
        }
      ]
    },
    {
      "id": "listitem",
      "impact": null,
      "tags": [
        "cat.structure",
        "wcag2a",
        "wcag131",
        "EN-301-549",
        "EN-9.1.3.1"
      ],
      "description": "Ensure <li> elements are used semantically",
      "help": "<li> elements must be contained in a <ul> or <ol>",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/listitem?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "listitem",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "List item has a <ul>, <ol> or role=\"list\" parent element"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<li>Explore different price and down payment scenarios</li>",
          "target": [
            "li:nth-child(1)"
          ]
        }
      ]
    },
    {
      "id": "meta-viewport",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag2aa",
        "wcag144",
        "EN-301-549",
        "EN-9.1.4.4",
        "ACT"
      ],
      "description": "Ensure <meta name=\"viewport\"> does not disable text scaling and zooming",
      "help": "Zooming and scaling must not be disabled",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/meta-viewport?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "meta-viewport",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "<meta> tag does not disable zooming on mobile devices"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
          "target": [
            "meta[name=\"viewport\"]"
          ]
        }
      ]
    },
    {
      "id": "nested-interactive",
      "impact": null,
      "tags": [
        "cat.keyboard",
        "wcag2a",
        "wcag412",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies",
      "help": "Interactive controls must not be nested",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/nested-interactive?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "no-focusable-content",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element does not have focusable descendants"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<img src=\"https://placehold.co/84x84/253d32/e1efb0?text=A%26A&amp;font=playfair%20display\" alt=\"Alder &amp; Acre logo\" width=\"42\" height=\"42\">",
          "target": [
            "a[aria-label=\"Alder and Acre home\"] > img[alt=\"Alder & Acre logo\"][width=\"42\"][height=\"42\"]"
          ]
        }
      ]
    },
    {
      "id": "select-name",
      "impact": null,
      "tags": [
        "cat.forms",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.n",
        "TTv5",
        "TT5.c",
        "EN-301-549",
        "EN-9.4.1.2",
        "ACT"
      ],
      "description": "Ensure select element has an accessible name",
      "help": "Select element must have an accessible name",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/select-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "explicit-label",
              "data": {
                "explicitLabel": "Your price range"
              },
              "relatedNodes": [
                {
                  "html": "<label for=\"max-price\">Your price range</label>",
                  "target": [
                    "label[for=\"max-price\"]"
                  ]
                }
              ],
              "impact": "critical",
              "message": "Element has an explicit <label>"
            }
          ],
          "all": [],
          "none": [
            {
              "id": "hidden-explicit-label",
              "data": null,
              "relatedNodes": [],
              "impact": "critical",
              "message": "Form element has a visible explicit <label>"
            }
          ],
          "impact": null,
          "html": "<select id=\"max-price\" name=\"price\"><option value=\"\">Any price</option><option value=\"600000\">Up to $600,000</option><option value=\"800000\">Up to $800,000</option><option value=\"1000000\">Up to $1,000,000</option></select>",
          "target": [
            "#max-price"
          ]
        }
      ]
    },
    {
      "id": "summary-name",
      "impact": null,
      "tags": [
        "cat.name-role-value",
        "wcag2a",
        "wcag412",
        "section508",
        "section508.22.a",
        "TTv5",
        "TT6.a",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure summary elements have discernible text",
      "help": "Summary elements must have discernible text",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/summary-name?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "has-visible-text",
              "data": null,
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element has text that is visible to screen readers"
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<summary>Where should I start as a first-time buyer?</summary>",
          "target": [
            "details[open=\"\"] > summary"
          ]
        }
      ]
    },
    {
      "id": "target-size",
      "impact": null,
      "tags": [
        "cat.sensory-and-visual-cues",
        "wcag22aa",
        "wcag258"
      ],
      "description": "Ensure touch targets have sufficient size and space",
      "help": "All touch targets must be 24px large, or leave sufficient space",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "target-size",
              "data": {
                "minSize": 24,
                "width": 130.6,
                "height": 48.8
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Control has sufficient size (130.6px by 48.8px, should be at least 24px by 24px)"
            },
            {
              "id": "target-offset",
              "data": {
                "closestOffset": 24,
                "minOffset": 24
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Target has sufficient space from its closest neighbors. Safe clickable space has a diameter of 24px which is at least 24px."
            }
          ],
          "all": [],
          "none": [],
          "impact": null,
          "html": "<a class=\"skip-link\" href=\"#main\">Skip to content</a>",
          "target": [
            ".skip-link"
          ]
        }
      ]
    }
  ],
  "incomplete": [
    {
      "id": "aria-prohibited-attr",
      "impact": "serious",
      "tags": [
        "cat.aria",
        "wcag2a",
        "wcag412",
        "EN-301-549",
        "EN-9.4.1.2"
      ],
      "description": "Ensure ARIA attributes are not prohibited for an element's role",
      "help": "Elements must only use permitted ARIA attributes",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr?application=axeAPI",
      "nodes": [
        {
          "any": [],
          "all": [],
          "none": [
            {
              "id": "aria-prohibited-attr",
              "data": {
                "role": null,
                "nodeName": "div",
                "messageKey": "noRoleSingular",
                "prohibited": [
                  "aria-label"
                ]
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "aria-label attribute is not well supported on a div with no valid role attribute."
            }
          ],
          "impact": "serious",
          "html": "<div class=\"stars\" aria-label=\"5 out of 5 stars\">\u2605\u2605\u2605\u2605\u2605</div>",
          "target": [
            ".stars"
          ],
          "failureSummary": "Fix all of the following:\n  aria-label attribute is not well supported on a div with no valid role attribute."
        }
      ]
    },
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "messageKey": "nonBmp"
              },
              "relatedNodes": [],
              "impact": "serious",
              "message": "Element content contains only non-text characters"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"stars\" aria-label=\"5 out of 5 stars\">\u2605\u2605\u2605\u2605\u2605</div>",
          "target": [
            ".stars"
          ],
          "failureSummary": "Fix any of the following:\n  Element content contains only non-text characters"
        }
      ]
    }
  ],
  "violations": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "tags": [
        "cat.color",
        "wcag2aa",
        "wcag143",
        "TTv5",
        "TT13.c",
        "EN-301-549",
        "EN-9.1.4.3",
        "ACT"
      ],
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
      "nodes": [
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#69726b",
                "bgColor": "#eceee4",
                "contrastRatio": 4.24,
                "fontSize": "11.3pt (15px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section neighborhoods\" id=\"neighborhoods\" aria-labelledby=\"neighborhood-heading\">",
                  "target": [
                    "#neighborhoods"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 11.3pt (15px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p>The coffee shop that knows your order. Your favorite Saturday walk. Discover the everyday details that make Portland\u2019s neighborhoods feel like home.</p>",
          "target": [
            "#neighborhoods > .container > .section-head > div > p"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 11.3pt (15px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#69726b",
                "bgColor": "#eceee4",
                "contrastRatio": 4.24,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section neighborhoods\" id=\"neighborhoods\" aria-labelledby=\"neighborhood-heading\">",
                  "target": [
                    "#neighborhoods"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p><strong>Built around your everyday life.</strong> We help you compare commute times, transit connections, nearby amenities, and the range of available property styles\u2014not just what\u2019s inside the front door.</p>",
          "target": [
            ".neighborhood-details > p:nth-child(1)"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#69726b",
                "bgColor": "#eceee4",
                "contrastRatio": 4.24,
                "fontSize": "9.8pt (13px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<section class=\"section neighborhoods\" id=\"neighborhoods\" aria-labelledby=\"neighborhood-heading\">",
                  "target": [
                    "#neighborhoods"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<p><strong>Explore with a local.</strong> Your priorities lead the way. We\u2019ll share practical insights, suggest walking routes, and point you toward official school, planning, and transportation resources for your own research.</p>",
          "target": [
            ".neighborhood-details > p:nth-child(2)"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 9.8pt (13px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#69726b",
                "bgColor": "#eceee4",
                "contrastRatio": 4.24,
                "fontSize": "8.3pt (11px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"estimate\" aria-live=\"polite\" aria-atomic=\"true\">",
                  "target": [
                    ".estimate"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"estimate-label\">Estimated principal &amp; interest</div>",
          "target": [
            ".estimate-label"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 8.3pt (11px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#69726b",
                "bgColor": "#eceee4",
                "contrastRatio": 4.24,
                "fontSize": "9.0pt (12px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"estimate\" aria-live=\"polite\" aria-atomic=\"true\">",
                  "target": [
                    ".estimate"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span> / month</span>",
          "target": [
            ".estimate-value > span"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#69726b",
                "bgColor": "#eceee4",
                "contrastRatio": 4.24,
                "fontSize": "7.5pt (10px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<div class=\"testimonial\">",
                  "target": [
                    ".testimonial"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<span>First-time buyers \u00b7 Northeast Portland</span>",
          "target": [
            ".testimonial-person > div:nth-child(2) > span"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.24 (foreground color: #69726b, background color: #eceee4, font size: 7.5pt (10px), font weight: normal). Expected contrast ratio of 4.5:1"
        },
        {
          "any": [
            {
              "id": "color-contrast",
              "data": {
                "fgColor": "#69726b",
                "bgColor": "#f1f1ea",
                "contrastRatio": 4.38,
                "fontSize": "6.8pt (9px)",
                "fontWeight": "normal",
                "messageKey": null,
                "expectedContrastRatio": "4.5:1",
                "shadowColor": null
              },
              "relatedNodes": [
                {
                  "html": "<header class=\"header\">",
                  "target": [
                    "header"
                  ]
                },
                {
                  "html": "<section class=\"section seller\" id=\"seller\" aria-labelledby=\"seller-heading\">",
                  "target": [
                    "#seller"
                  ]
                }
              ],
              "impact": "serious",
              "message": "Element has insufficient color contrast of 4.38 (foreground color: #69726b, background color: #f1f1ea, font size: 6.8pt (9px), font weight: normal). Expected contrast ratio of 4.5:1"
            }
          ],
          "all": [],
          "none": [],
          "impact": "serious",
          "html": "<div class=\"brand-tagline\">A BETTER PLACE TO PUT DOWN ROOTS.</div>",
          "target": [
            "a[aria-label=\"Alder and Acre home\"] > div > .brand-tagline"
          ],
          "failureSummary": "Fix any of the following:\n  Element has insufficient color contrast of 4.38 (foreground color: #69726b, background color: #f1f1ea, font size: 6.8pt (9px), font weight: normal). Expected contrast ratio of 4.5:1"
        }
      ]
    }
  ],
  "coverage": {
    "contract": "main-document-vertical-scroll",
    "complete": true,
    "positions": [
      {
        "y": 0,
        "height": 6241
      },
      {
        "y": 576,
        "height": 6241
      },
      {
        "y": 1152,
        "height": 6241
      },
      {
        "y": 1728,
        "height": 6241
      },
      {
        "y": 2304,
        "height": 6241
      },
      {
        "y": 2880,
        "height": 6241
      },
      {
        "y": 3456,
        "height": 6241
      },
      {
        "y": 4032,
        "height": 6241
      },
      {
        "y": 4608,
        "height": 6241
      },
      {
        "y": 5184,
        "height": 6241
      },
      {
        "y": 5521,
        "height": 6241
      }
    ],
    "scans": 12,
    "max_states": 512,
    "settle_ms": 5000,
    "page_timeout_seconds": 150,
    "layout_stability": "consecutive 100ms size samples within one CSS pixel",
    "animation_settling": "finite animations present when scroll resources are ready finish or are cancelled",
    "interactive_states": "not exercised",
    "horizontal_scroll": "not exercised"
  }
}
System Prompt
You are a lead web developer at a top digital agency, tasked with creating a one-page website for a new client based on the given specifications, delivered as an HTML file. First non-whitespace char '<', last non-whitespace char '>'. Use the following services to generate placeholder images where needed:
- placehold.co (text): https://placehold.co/[{w}x{h}|{size}][/{bg-color}/{text-color}]?text={text}&font=[lato|lora|montserrat|noto sans|open sans|oswald|playfair display|poppins|pt sans|raleway|roboto|source sans|source sans pro]
- picsum.photos (photos): https://picsum.photos/[{w}/{h}|{size}]?[grayscale][&blur={1-10}]
- pravatar.cc (avatars): https://i.pravatar.cc/{size}?u={identifier}
Choose sizes appropriate to layout.
User Prompt
Create a **complete, polished, production-quality** primary web page for a new client in the "Real Estate" sector.
Your goal is to generate the full HTML code for a page that is not just functional but also visually compelling, content-rich, and feels like a finished product ready for launch.

**Client & Category:**
- Industry: "Real Estate"
- Description: Property listings, real estate agencies, home buying, rentals, and mortgage resources.

**Your Creative Task:**
1.  **Invent:** Create a unique, professional-sounding site name and a strong tagline fitting the "Real Estate" category.
2.  **Define Page:** Determine the most effective primary page type (e.g., homepage, service landing page, category portal) to showcase this fictional entity.
3.  **Design:** Develop an opinionated, modern, and professional layout. Make distinct choices about structure and flow.

**Content & Structure Requirements (Deliver a COMPLETE page):**
-   **Overall:** The final page must feel substantial and complete, with realistic amounts of text (multiple paragraphs per section where appropriate, avoid single sentences), well-integrated placeholder images, and logical flow. It should look like a real website a business would proudly use.
-   **HEADER:** Include the invented site name, tagline, a logo placeholder image, and a primary navigation bar. Ensure the navigation has **at least 5-7 clearly defined, relevant links** including: "Buy", "About", "Calculator".
-   **MAIN CONTENT:** Structure this area with **at least 3-4 distinct, well-developed sections**.
    -   Address key topics relevant to the "Real Estate" category. Consider themes similar to: "Seller Guide", "Featured Listings", "Neighborhood Guide".
    -   **Content Depth:** Populate each section with **substantial, realistic text** (multiple sentences/paragraphs). Use authentic industry language and terminology like: "square footage", "earnest money", "listing price".
    -   **Visuals:** Integrate relevant placeholder images logically within the content sections.
    -   **Calls to Action:** Include clear and contextually relevant CTAs. Use strong verbs similar to: "View Details", "Schedule Tour", "Get Valuation".
-   **ENGAGEMENT (Recommended):** Strongly consider incorporating **one meaningful interactive element** that would genuinely benefit a user in the "Real Estate" sector. Ideas similar but not limited to: "mortgage pre-qualifier".
-   **SIDEBAR (Optional):** If your design includes a sidebar, populate it with **useful, relevant content**. Ideas: "new listings", "mortgage rates", "seller advice".
-   **FOOTER:** Include a professional footer with invented contact details, copyright (current year), social media links, and standard links (Privacy, Terms).
-   **MODERN WEB PATTERNS:** Include modern web patterns like testimonial cards, feature grids, or FAQ accordions where appropriate.