Search Homes Skip to content Kyra Apartments | Offering Memorandum /* ============================================ RESET & BASE ============================================ */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } :root { –navy: #1a2332; –navy-light: #243044; –navy-dark: #111927; –gold: #c9a84c; –gold-light: #e0c76e; –gold-dark: #a88a2e; –white: #ffffff; –off-white: #f5f5f0; –gray-100: #f0f0ec; –gray-200: #e0e0dc; –gray-300: #c0c0b8; –gray-500: #888880; –gray-700: #555550; –success: #2ecc71; –section-pad: clamp(60px, 8vw, 120px); } html { scroll-behavior: smooth; font-size: 16px; } body { font-family: ‘Inter’, -apple-system, BlinkMacSystemFont, sans-serif; color: var(–navy); background: var(–white); line-height: 1.6; overflow-x: hidden; } .serif { font-family: ‘Playfair Display’, Georgia, serif; } img { max-width: 100%; display: block; } a { color: var(–gold-dark); text-decoration: none; } a:hover { color: var(–gold); } /* ============================================ DISCLAIMER BANNER ============================================ */ .disclaimer-banner { background: linear-gradient(90deg, #b71c1c, #d32f2f); color: var(–white); text-align: center; padding: 10px 20px; font-size: 0.72rem; font-weight: 700; letter-spacing: 3px; text-transform: uppercase; position: fixed; top: 0; left: 0; right: 0; z-index: 1000; } /* ============================================ NAVIGATION ============================================ */ .top-nav { position: fixed; top: 36px; left: 0; right: 0; z-index: 999; background: rgba(26,35,50,0.92); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border-bottom: 1px solid rgba(201,168,76,0.15); transition: transform 0.3s ease, box-shadow 0.3s ease; } .top-nav.scrolled { box-shadow: 0 4px 30px rgba(0,0,0,0.3); } .nav-inner { max-width: 1400px; margin: 0 auto; display: flex; align-items: center; justify-content: space-between; padding: 0 30px; height: 56px; } .nav-logo { font-family: ‘Playfair Display’, serif; color: var(–gold); font-size: 1.3rem; font-weight: 700; letter-spacing: 1px; } .nav-logo span { color: var(–white); font-weight: 400; opacity: 0.7; font-size: 0.85rem; margin-left: 8px; } .nav-links { display: flex; gap: 24px; align-items: center; } .nav-links a { color: rgba(255,255,255,0.7); font-size: 0.78rem; font-weight: 500; letter-spacing: 0.5px; text-transform: uppercase; transition: color 0.2s; } .nav-links a:hover { color: var(–gold); } .nav-cta { background: var(–gold) !important; color: var(–navy) !important; padding: 8px 20px; border-radius: 4px; font-weight: 700 !important; font-size: 0.72rem !important; letter-spacing: 1px; } .nav-cta:hover { background: var(–gold-light) !important; } .mobile-toggle { display: none; background: none; border: none; cursor: pointer; padding: 8px; } .mobile-toggle span { display: block; width: 22px; height: 2px; background: var(–white); margin: 5px 0; transition: 0.3s; } /* ============================================ SECTION FRAMEWORK ============================================ */ .section { padding: var(–section-pad) 30px; position: relative; } .section-inner { max-width: 1200px; margin: 0 auto; } .section-dark { background: var(–navy); color: var(–white); } .section-light { background: var(–off-white); } .section-label { display: inline-block; font-size: 0.7rem; font-weight: 700; letter-spacing: 3px; text-transform: uppercase; color: var(–gold); margin-bottom: 12px; } .section-title { font-family: ‘Playfair Display’, serif; font-size: clamp(2rem, 4vw, 3.2rem); font-weight: 700; line-height: 1.15; margin-bottom: 20px; } .section-subtitle { font-size: 1.05rem; color: var(–gray-500); max-width: 640px; line-height: 1.7; } .section-dark .section-subtitle { color: rgba(255,255,255,0.55); } /* ============================================ HERO SECTION ============================================ */ .hero { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(165deg, var(–navy-dark) 0%, var(–navy) 40%, var(–navy-light) 100%); color: var(–white); position: relative; overflow: hidden; padding-top: 92px; } .hero::before { content: ”; position: absolute; top: -50%; right: -30%; width: 80vw; height: 80vw; border-radius: 50%; background: radial-gradient(circle, rgba(201,168,76,0.06) 0%, transparent 70%); animation: heroGlow 8s ease-in-out infinite alternate; } @keyframes heroGlow { 0% { transform: translate(0,0) scale(1); } 100% { transform: translate(-5%,5%) scale(1.1); } } .hero-content { position: relative; z-index: 2; text-align: center; max-width: 900px; padding: 0 30px; } .hero-badge { display: inline-flex; align-items: center; gap: 8px; background: rgba(201,168,76,0.12); border: 1px solid rgba(201,168,76,0.3); color: var(–gold); font-size: 0.7rem; font-weight: 700; letter-spacing: 3px; text-transform: uppercase; padding: 8px 20px; border-radius: 50px; margin-bottom: 30px; } .hero-badge .dot { width: 6px; height: 6px; border-radius: 50%; background: var(–gold); animation: pulse 2s infinite; } @keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.3; } } .hero h1 { font-family: ‘Playfair Display’, serif; font-size: clamp(3rem, 7vw, 5.5rem); font-weight: 700; line-height: 1.05; margin-bottom: 12px; } .hero h1 .gold { color: var(–gold); } .hero-address { font-size: 1.1rem; color: rgba(255,255,255,0.5); letter-spacing: 2px; margin-bottom: 40px; } .hero-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 2px; background: rgba(255,255,255,0.08); border-radius: 12px; overflow: hidden; margin-bottom: 40px; } .hero-metric { padding: 28px 16px; text-align: center; background: rgba(26,35,50,0.6); backdrop-filter: blur(8px); } .hero-metric-value { font-size: clamp(1.2rem, 2.5vw, 1.7rem); font-weight: 800; color: var(–gold); margin-bottom: 4px; white-space: nowrap; display: flex; align-items: baseline; justify-content: center; gap: 0; } .hero-metric-value span.counter { display: inline; } .hero-metric-label { font-size: 0.68rem; text-transform: uppercase; letter-spacing: 1.5px; color: rgba(255,255,255,0.45); font-weight: 600; } .hero-actions { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; } .btn { display: inline-flex; align-items: center; gap: 8px; padding: 14px 32px; border-radius: 6px; font-size: 0.82rem; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; cursor: pointer; border: none; transition: background 0.4s ease, color 0.4s ease, transform 0.4s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.4s ease; } .btn-gold { background: var(–gold); color: var(–navy); } .btn-gold:hover { background: var(–gold-light); transform: translateY(-2px); box-shadow: 0 8px 25px rgba(201,168,76,0.3); } .btn-outline { background: transparent; color: var(–white); border: 1.5px solid rgba(255,255,255,0.25); } .btn-outline:hover { border-color: var(–gold); color: var(–gold); } .scroll-indicator { position: absolute; bottom: 30px; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 8px; color: rgba(255,255,255,0.3); font-size: 0.65rem; letter-spacing: 2px; text-transform: uppercase; animation: scrollBounce 2s infinite; } @keyframes scrollBounce { 0%,100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(8px); } } .scroll-indicator .arrow { width: 20px; height: 20px; border-right: 1.5px solid rgba(255,255,255,0.3); border-bottom: 1.5px solid rgba(255,255,255,0.3); transform: rotate(45deg); } /* ============================================ ANIMATED STAT CARDS ============================================ */ .stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 24px; margin-top: 50px; } .stat-card { background: var(–white); border-radius: 12px; padding: 32px 28px; border: 1px solid var(–gray-200); position: relative; overflow: hidden; opacity: 0; transform: translateY(30px); transition: opacity 0.9s cubic-bezier(0.16, 1, 0.3, 1), transform 0.9s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.4s ease; will-change: opacity, transform; } .stat-card.visible { opacity: 1; transform: translateY(0); } .stat-card:hover { transform: translateY(-4px); box-shadow: 0 12px 40px rgba(0,0,0,0.08); } .stat-card::before { content: ”; position: absolute; top: 0; left: 0; width: 100%; height: 3px; background: linear-gradient(90deg, var(–gold), var(–gold-light)); } .stat-card .stat-icon { width: 44px; height: 44px; border-radius: 10px; background: rgba(201,168,76,0.1); display: flex; align-items: center; justify-content: center; margin-bottom: 18px; font-size: 1.2rem; } .stat-card .stat-value { font-size: 2rem; font-weight: 800; color: var(–navy); margin-bottom: 4px; white-space: nowrap; display: flex; align-items: baseline; justify-content: center; gap: 0; } .stat-card .stat-label { font-size: 0.78rem; color: var(–gray-500); font-weight: 500; text-transform: uppercase; letter-spacing: 1px; } /* ============================================ PRO FORMA DISCLOSURE ============================================ */ .disclosure-box { background: rgba(201,168,76,0.06); border: 1px solid rgba(201,168,76,0.2); border-radius: 12px; padding: 32px; margin-top: 30px; } .disclosure-box h3 { color: var(–gold-dark); font-size: 1rem; font-weight: 700; margin-bottom: 12px; text-transform: uppercase; letter-spacing: 1px; } .disclosure-box p { font-size: 0.88rem; color: var(–gray-700); line-height: 1.7; } /* ============================================ FEATURES GRID ============================================ */ .features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 20px; margin-top: 40px; } .feature-item { display: flex; align-items: flex-start; gap: 16px; padding: 24px; background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.06); border-radius: 10px; opacity: 0; transform: translateX(-20px); transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1); will-change: opacity, transform; } .feature-item.visible { opacity: 1; transform: translateX(0); } .feature-icon { flex-shrink: 0; width: 40px; height: 40px; border-radius: 8px; background: rgba(201,168,76,0.12); display: flex; align-items: center; justify-content: center; color: var(–gold); font-size: 1.1rem; } .feature-item h4 { color: var(–white); font-size: 0.95rem; font-weight: 600; margin-bottom: 4px; } .feature-item p { color: rgba(255,255,255,0.5); font-size: 0.82rem; line-height: 1.5; } /* ============================================ LOCATION SECTION ============================================ */ .proximity-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; margin-top: 36px; } .proximity-item { background: var(–white); border-radius: 10px; padding: 24px; text-align: center; border: 1px solid var(–gray-200); opacity: 0; transform: scale(0.9); transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1); will-change: opacity, transform; } .proximity-item.visible { opacity: 1; transform: scale(1); } .proximity-item .prox-icon { font-size: 1.8rem; margin-bottom: 10px; } .proximity-item .prox-dist { font-size: 1.4rem; font-weight: 800; color: var(–gold-dark); margin-bottom: 2px; } .proximity-item .prox-label { font-size: 0.78rem; color: var(–gray-500); font-weight: 500; } /* ============================================ CHARTS ============================================ */ .chart-container { position: relative; margin: 40px auto; } /* Donut Chart */ .donut-chart { width: 260px; height: 260px; margin: 0 auto; position: relative; } .donut-chart svg { width: 100%; height: 100%; transform: rotate(-90deg); } .donut-chart circle { fill: none; stroke-width: 32; stroke-linecap: round; } .donut-bg { stroke: rgba(255,255,255,0.06); } .donut-segment { stroke-dasharray: 0 1000; transition: stroke-dasharray 2.5s cubic-bezier(0.16, 1, 0.3, 1); will-change: stroke-dasharray; } .donut-segment.animated { /* set via JS */ } .donut-center { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); text-align: center; } .donut-center .amount { font-size: 1.6rem; font-weight: 800; color: var(–white); } .donut-center .label { font-size: 0.7rem; color: rgba(255,255,255,0.5); text-transform: uppercase; letter-spacing: 1px; } .chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 20px; margin-top: 24px; } .legend-item { display: flex; align-items: center; gap: 8px; font-size: 0.82rem; } .legend-dot { width: 10px; height: 10px; border-radius: 3px; } /* Bar Chart */ .bar-chart { max-width: 700px; margin: 0 auto; } .bar-row { display: flex; align-items: center; gap: 16px; margin-bottom: 14px; } .bar-label { width: 160px; font-size: 0.82rem; font-weight: 500; color: rgba(255,255,255,0.7); text-align: right; flex-shrink: 0; } .bar-track { flex: 1; height: 28px; background: rgba(255,255,255,0.05); border-radius: 6px; overflow: hidden; position: relative; } .bar-fill { height: 100%; border-radius: 6px; width: 0; transition: width 2s cubic-bezier(0.16, 1, 0.3, 1); display: flex; align-items: center; padding-left: 12px; will-change: width; } .bar-fill.animated { /* width set via JS */ } .bar-amount { font-size: 0.72rem; font-weight: 700; color: var(–white); white-space: nowrap; } /* Line Chart */ .line-chart { width: 100%; max-width: 700px; margin: 0 auto; position: relative; } .line-chart svg { width: 100%; overflow: visible; } .chart-line { fill: none; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1000; stroke-dashoffset: 1000; transition: stroke-dashoffset 2.8s cubic-bezier(0.16, 1, 0.3, 1); will-change: stroke-dashoffset; } .chart-line.animated { stroke-dashoffset: 0; } .chart-dot { opacity: 0; transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1); will-change: opacity; } .chart-dot.animated { opacity: 1; } .chart-grid-line { stroke: rgba(255,255,255,0.06); stroke-width: 1; } .chart-axis-label { fill: rgba(255,255,255,0.4); font-size: 11px; font-family: ‘Inter’, sans-serif; } /* ============================================ PRO FORMA TABLE ============================================ */ .proforma-table { width: 100%; border-collapse: collapse; margin-top: 30px; } .proforma-table th, .proforma-table td { padding: 14px 20px; text-align: left; font-size: 0.88rem; } .proforma-table thead th { background: var(–navy); color: var(–gold); font-weight: 700; font-size: 0.72rem; letter-spacing: 1.5px; text-transform: uppercase; border-bottom: 2px solid var(–gold); } .proforma-table tbody tr { border-bottom: 1px solid var(–gray-200); transition: background 0.2s; } .proforma-table tbody tr:hover { background: rgba(201,168,76,0.04); } .proforma-table .row-header { font-weight: 600; color: var(–navy); } .proforma-table .row-indent { padding-left: 40px; color: var(–gray-700); } .proforma-table .row-total { font-weight: 700; background: var(–gray-100); border-top: 2px solid var(–navy); } .proforma-table .row-noi { font-weight: 800; background: rgba(201,168,76,0.08); border-top: 2px solid var(–gold); font-size: 1rem; } .proforma-table .text-right { text-align: right; } .proforma-table .text-gold { color: var(–gold-dark); font-weight: 700; } /* ============================================ CAP RATE SLIDER ============================================ */ .slider-container { max-width: 600px; margin: 40px auto 0; text-align: center; } .slider-label { font-size: 0.82rem; color: rgba(255,255,255,0.5); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 1px; font-weight: 600; } .slider-value-display { font-size: 3rem; font-weight: 800; color: var(–gold); margin-bottom: 8px; font-family: ‘Playfair Display’, serif; } .slider-implied { font-size: 1.1rem; color: rgba(255,255,255,0.7); margin-bottom: 30px; } .slider-implied strong { color: var(–gold-light); font-weight: 700; } input[type=”range”] { -webkit-appearance: none; width: 100%; height: 6px; background: rgba(255,255,255,0.1); border-radius: 3px; outline: none; } input[type=”range”]::-webkit-slider-thumb { -webkit-appearance: none; width: 28px; height: 28px; border-radius: 50%; background: var(–gold); cursor: pointer; box-shadow: 0 2px 10px rgba(201,168,76,0.4); transition: transform 0.2s; } input[type=”range”]::-webkit-slider-thumb:hover { transform: scale(1.15); } .slider-ticks { display: flex; justify-content: space-between; margin-top: 10px; font-size: 0.72rem; color: rgba(255,255,255,0.35); font-weight: 500; } /* Sensitivity Table */ .sensitivity-table { width: 100%; max-width: 700px; margin: 40px auto 0; border-collapse: collapse; } .sensitivity-table th, .sensitivity-table td { padding: 12px 16px; text-align: center; font-size: 0.85rem; } .sensitivity-table thead th { color: var(–gold); font-weight: 700; font-size: 0.7rem; letter-spacing: 1.5px; text-transform: uppercase; border-bottom: 1px solid rgba(201,168,76,0.3); } .sensitivity-table tbody tr { border-bottom: 1px solid rgba(255,255,255,0.05); } .sensitivity-table tbody tr:hover { background: rgba(201,168,76,0.05); } .sensitivity-table td { color: rgba(255,255,255,0.7); } .sensitivity-table .highlight-row { background: rgba(201,168,76,0.1); } .sensitivity-table .highlight-row td { color: var(–gold); font-weight: 700; } /* ============================================ IMAGE PLACEHOLDERS ============================================ */ .image-placeholder { background: linear-gradient(135deg, var(–gray-100), var(–gray-200)); border-radius: 12px; display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(–gray-500); font-size: 0.82rem; font-weight: 500; min-height: 300px; border: 2px dashed var(–gray-300); } .image-placeholder.dark { background: linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.06)); border-color: rgba(255,255,255,0.1); color: rgba(255,255,255,0.35); } .image-placeholder .ph-icon { font-size: 2.5rem; margin-bottom: 10px; opacity: 0.5; } .image-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-top: 30px; } /* Video Placeholder */ .video-placeholder { background: var(–navy-dark); border-radius: 12px; min-height: 400px; display: flex; flex-direction: column; align-items: center; justify-content: center; color: rgba(255,255,255,0.3); border: 1px solid rgba(255,255,255,0.06); position: relative; overflow: hidden; margin-top: 30px; } .video-placeholder::before { content: ”; position: absolute; inset: 0; background: radial-gradient(circle at center, rgba(201,168,76,0.05), transparent 60%); } .play-btn { width: 70px; height: 70px; border-radius: 50%; background: rgba(201,168,76,0.15); border: 2px solid var(–gold); display: flex; align-items: center; justify-content: center; margin-bottom: 16px; position: relative; z-index: 1; cursor: pointer; transition: transform 0.3s, background 0.3s; } .play-btn:hover { transform: scale(1.1); background: rgba(201,168,76,0.25); } .play-btn::after { content: ”; width: 0; height: 0; border-style: solid; border-width: 12px 0 12px 22px; border-color: transparent transparent transparent var(–gold); margin-left: 4px; } /* ============================================ CONTACT SECTION ============================================ */ .contact-card { background: var(–white); border-radius: 16px; padding: 48px; max-width: 600px; margin: 40px auto 0; text-align: center; box-shadow: 0 20px 60px rgba(0,0,0,0.15); } .contact-avatar { width: 80px; height: 80px; border-radius: 50%; background: linear-gradient(135deg, var(–gold), var(–gold-dark)); display: flex; align-items: center; justify-content: center; margin: 0 auto 20px; font-size: 1.8rem; font-weight: 700; color: var(–white); font-family: ‘Playfair Display’, serif; } .contact-name { font-size: 1.4rem; font-weight: 700; color: var(–navy); margin-bottom: 4px; } .contact-title { font-size: 0.88rem; color: var(–gray-500); margin-bottom: 24px; } .contact-info { display: flex; flex-direction: column; gap: 12px; margin-bottom: 30px; } .contact-info a { display: flex; align-items: center; justify-content: center; gap: 10px; color: var(–navy); font-size: 0.92rem; font-weight: 500; padding: 10px; border-radius: 8px; transition: background 0.2s; } .contact-info a:hover { background: var(–gray-100); } .brg-logo { margin-top: 24px; padding-top: 24px; border-top: 1px solid var(–gray-200); } .brg-logo-text { font-family: ‘Playfair Display’, serif; font-size: 1.6rem; font-weight: 700; color: var(–navy); letter-spacing: 2px; } .brg-logo-sub { font-size: 0.68rem; color: var(–gray-500); letter-spacing: 3px; text-transform: uppercase; margin-top: 2px; } /* ============================================ FOOTER / DISCLOSURES ============================================ */ .footer { background: var(–navy-dark); color: rgba(255,255,255,0.35); padding: 60px 30px 30px; font-size: 0.75rem; line-height: 1.8; } .footer-inner { max-width: 1000px; margin: 0 auto; } .footer h4 { color: var(–gold); font-size: 0.72rem; letter-spacing: 2px; text-transform: uppercase; margin-bottom: 16px; } .footer p { margin-bottom: 16px; } .footer-bottom { margin-top: 40px; padding-top: 20px; border-top: 1px solid rgba(255,255,255,0.06); text-align: center; font-size: 0.7rem; } /* ============================================ ANIMATIONS & REVEAL ============================================ */ .reveal { opacity: 0; transform: translateY(40px); transition: opacity 1s cubic-bezier(0.16, 1, 0.3, 1), transform 1s cubic-bezier(0.16, 1, 0.3, 1); will-change: opacity, transform; } .reveal.visible { opacity: 1; transform: translateY(0); } .reveal-delay-1 { transition-delay: 0.15s; } .reveal-delay-2 { transition-delay: 0.3s; } .reveal-delay-3 { transition-delay: 0.45s; } .reveal-delay-4 { transition-delay: 0.6s; } /* Counter animation */ .counter { display: inline-block; } /* ============================================ TWO COLUMN LAYOUT ============================================ */ .two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 60px; align-items: start; } .two-col-wide { display: grid; grid-template-columns: 1.2fr 0.8fr; gap: 60px; align-items: start; } /* ============================================ RESPONSIVE ============================================ */ @media (max-width: 900px) { .hero-metrics { grid-template-columns: repeat(2, 1fr); } .two-col, .two-col-wide { grid-template-columns: 1fr; gap: 40px; } .nav-links { display: none; } .mobile-toggle { display: block; } .bar-label { width: 100px; font-size: 0.72rem; } .proforma-table th, .proforma-table td { padding: 10px 12px; font-size: 0.78rem; } .contact-card { padding: 32px 24px; } } @media (max-width: 600px) { .hero-metrics { grid-template-columns: 1fr 1fr; } .hero h1 { font-size: 2.4rem; } .stat-grid { grid-template-columns: 1fr; } .features-grid { grid-template-columns: 1fr; } .proximity-grid { grid-template-columns: 1fr 1fr; } .proforma-table { font-size: 0.72rem; } }
Under Construction  |  Projections & Estimates — Not Guaranteed
Exclusive Offering — Early Q2 2026

Kyra Apartments

5432–5434 Churchward Street • San Diego, CA 92114
$0
List Price
10 Units
Townhome-Style
0%
Cap Rate
$0
Net Operating Income
Scroll to explore

A Rare New-Construction
Multifamily Opportunity

Kyra Apartments presents a compelling acquisition opportunity: 10 brand-new, townhome-style units in San Diego’s rapidly evolving Encanto neighborhood, delivering stable cash flow from day one with meaningful upside through organic rent growth.

$0
Price Per Unit
$0
Price Per SF
0x
Gross Rent Multiplier
0%
Owner-Op Cap Rate
0
Rentable SF
0
Avg SF Per Unit
0
On-Site Parking Spaces
0BR/0BA
All Units

Under Construction
with Early Q2 2026 Delivery

Kyra Apartments is currently under construction with anticipated completion and delivery in Early Q2 2026. The property is being offered for sale prior to stabilization to allow investors to acquire at a favorable basis before full lease-up.

All financial figures presented in this memorandum are projected estimates based on current market conditions, comparable properties, and anticipated stabilized operations. Actual results will depend on market conditions at lease-up, final construction costs, and property management decisions.

Pro Forma Disclosure

The operating projections contained herein are estimates only and are based on assumptions regarding future market conditions and property performance. These projections are not guarantees. The property is being sold “as-is” and “where-is.” Buyers should conduct their own independent investigation and due diligence regarding all financial projections, property conditions, and market assumptions. Past performance of similar properties does not guarantee future results.

Prepared March 2026 by Blum Realty Group. All information deemed reliable but not guaranteed.

Modern Townhome-Style Living
in a Gated Community

Every detail of Kyra Apartments has been designed to attract and retain quality tenants, with best-in-class finishes and lifestyle amenities that command premium rents.

10 Spacious Units

9 market-rate + 1 affordable (deed-restricted). All 3BR/2BA, ~1,280 SF each, two-story townhome-style.

Private Entrances

Each unit features its own private entrance, providing a single-family home feel within a multifamily community.

Gated Community

Secure, gated access with 22 on-site parking spaces (2.2 per unit), providing residents peace of mind and convenience.

Ocean Views

Select units enjoy views of the Pacific Ocean, adding a premium lifestyle component to the living experience.

In-Unit Laundry

Full-size washer/dryer connections in every unit, eliminating the need for shared laundry facilities.

High-Speed Internet

Pre-wired for high-speed internet connectivity throughout, meeting the demands of modern remote work lifestyles.

Modern Construction

Wood-frame construction with modern stucco exterior, contemporary finishes, and energy-efficient systems throughout.

~0.50 Acre Lot

Generous lot provides comfortable spacing between units and ample room for parking and common areas.

Encanto, San Diego
A Neighborhood on the Rise

Strategically positioned in one of San Diego’s most rapidly appreciating neighborhoods, Kyra Apartments offers convenient access to employment centers, transit, dining, and recreation.

🚕
0.5 mi
Euclid Trolley Station
🛣
3 min
I-805 Freeway Access
🏝
8 mi
Downtown San Diego
5 mi
San Diego Intl Airport
🏖
4 mi
Balboa Park
🏊
6 mi
Pacific Beach
🏫
1 mi
Lincoln High School
🛒
0.8 mi
Retail & Dining

Projected Operating Performance

The following pro forma reflects stabilized operations upon full lease-up, projecting strong cash flow with conservative underwriting assumptions.

Effective Gross Income Allocation

$411,255
Eff. Gross Income
NOI: $286,782 (69.7%)
OpEx: $124,473 (30.3%)

Operating Expense Breakdown

Property Taxes
$68,750
Management (5%)
$20,563
Repairs & Maint.
$12,000
Reserves
$8,000
Insurance
$6,000
Landscaping
$5,000
Trash
$2,160
Admin/Misc
$2,000

Projected Stabilized Year 1

Line Item Monthly Annual Per Unit
Revenue
Market Rent (9 units x $3,800) $34,200 $410,400 $45,600
Affordable Rent (1 unit x $1,875) $1,875 $22,500 $22,500
Gross Potential Rent $36,075 $432,900 $43,290
Less: Vacancy (5%) ($1,804) ($21,645) ($2,165)
Effective Gross Income $34,271 $411,255 $41,126
Operating Expenses
Property Taxes (1.10%) $5,729 $68,750 $6,875
Management Fee (5%) $1,714 $20,563 $2,056
Repairs & Maintenance $1,000 $12,000 $1,200
Reserves $667 $8,000 $800
Insurance $500 $6,000 $600
Landscaping / Common Area $417 $5,000 $500
Trash $180 $2,160 $216
Admin / Misc $167 $2,000 $200
Total Operating Expenses $10,373 $124,473 $12,447
Net Operating Income (NOI) $23,899 $286,782 $28,678
Owner-Operated NOI (no mgmt.) $25,612 $307,345 $30,735

Interactive Cap Rate Analysis

Explore how changes in cap rate affect the implied property value. Drag the slider to model different market scenarios.

Selected Cap Rate
4.59%
Implied Value (NOI): $6,250,000
Implied Value (Owner-Op): $6,698,148
4.00%4.25%4.50%4.75%5.00%5.25%5.50%

Implied Value by Cap Rate

$7.2M $6.8M $6.4M $6.0M $5.6M 4.25% 4.50% 4.75% 5.00%
Implied Value (NOI)
Implied Value (Owner-Op)
Cap Rate Implied Value (NOI) Implied Value (Owner-Op)
4.25% $6,747,812 $7,231,647
4.50% $6,372,933 $6,829,889
4.59% (Asking) $6,250,000 $6,698,148
4.75% $6,037,516 $6,470,421
5.00% $5,735,640 $6,146,900
5.25% $5,462,514 $5,854,190
Kyra Apartments aerial view showing both buildings
Kyra Apartments front street view
Kyra Apartments close-up building detail
Kyra Apartments aerial wide shot with surrounding area
Kyra Apartments neighborhood context aerial
Kyra Apartments with downtown San Diego skyline

Schedule a Private Tour
or Request Additional Information

FB
Frederick Blum
Principal • Blum Realty Group
(function() { ‘use strict’; // ========================================== // INTERSECTION OBSERVER FOR REVEALS // ========================================== const revealObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add(‘visible’); // Don’t unobserve so we keep triggering counters, etc. } }); }, { threshold: 0.15, rootMargin: ‘0px 0px -40px 0px’ }); document.querySelectorAll(‘.reveal, .stat-card, .feature-item, .proximity-item’).forEach(el => { revealObserver.observe(el); }); // ========================================== // COUNTER ANIMATIONS // ========================================== function animateCounter(el) { if (el.dataset.animated) return; el.dataset.animated = ‘1’; const target = parseFloat(el.dataset.target); const format = el.dataset.format; const duration = 4600; const start = performance.now(); function update(now) { const elapsed = now – start; const progress = Math.min(elapsed / duration, 1); // easeOutExpo: smooth deceleration const eased = progress === 1 ? 1 : 1 – Math.pow(2, -10 * progress); const current = target * eased; if (format === ‘comma’) { el.textContent = Math.round(current).toLocaleString(‘en-US’); } else if (format === ‘pct’) { el.textContent = current.toFixed(2); } else if (format === ‘dec1’) { el.textContent = current.toFixed(1); } else if (format === ‘int’) { el.textContent = Math.round(current); } else { el.textContent = Math.round(current).toLocaleString(‘en-US’); } if (progress { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.querySelectorAll(‘.counter’).forEach(animateCounter); } }); }, { threshold: 0.3 }); document.querySelectorAll(‘.hero-metric, .stat-card’).forEach(el => { counterObserver.observe(el); }); // ========================================== // DONUT CHART ANIMATION // ========================================== const circumference = 2 * Math.PI * 80; // ~502.65 const donutObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting && !entry.target.dataset.animated) { entry.target.dataset.animated = ‘1’; const segments = entry.target.querySelectorAll(‘.donut-segment’); let offset = 0; segments.forEach(seg => { const pct = parseFloat(seg.dataset.pct); const segLen = (pct / 100) * circumference; const dataOffset = parseFloat(seg.dataset.offset || 0); const dashOffset = (dataOffset / 100) * circumference; seg.style.strokeDashoffset = -dashOffset; setTimeout(() => { seg.style.strokeDasharray = segLen + ‘ ‘ + (circumference – segLen); }, 200); }); } }); }, { threshold: 0.4 }); const donutEl = document.getElementById(‘donutChart’); if (donutEl) donutObserver.observe(donutEl); // ========================================== // BAR CHART ANIMATION // ========================================== const barObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting && !entry.target.dataset.animated) { entry.target.dataset.animated = ‘1’; const bars = entry.target.querySelectorAll(‘.bar-fill’); bars.forEach((bar, i) => { setTimeout(() => { bar.style.width = bar.dataset.width + ‘%’; }, i * 180); }); } }); }, { threshold: 0.3 }); const barEl = document.getElementById(‘barChart’); if (barEl) barObserver.observe(barEl); // ========================================== // LINE CHART ANIMATION // ========================================== const lineObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting && !entry.target.dataset.animated) { entry.target.dataset.animated = ‘1’; entry.target.querySelectorAll(‘.chart-line’).forEach(line => { line.classList.add(‘animated’); }); setTimeout(() => { entry.target.querySelectorAll(‘.chart-dot’).forEach((dot, i) => { setTimeout(() => dot.classList.add(‘animated’), i * 250); }); }, 1200); } }); }, { threshold: 0.3 }); const lineEl = document.getElementById(‘lineChart’); if (lineEl) lineObserver.observe(lineEl); // ========================================== // CAP RATE SLIDER // ========================================== const slider = document.getElementById(‘capSlider’); const capDisplay = document.getElementById(‘sliderCapDisplay’); const noiValueEl = document.getElementById(‘sliderNOIValue’); const ownerValueEl = document.getElementById(‘sliderOwnerValue’); const NOI = 286782; const OWNER_NOI = 307345; function updateSlider() { const cap = parseFloat(slider.value); const noiVal = NOI / (cap / 100); const ownerVal = OWNER_NOI / (cap / 100); capDisplay.textContent = cap.toFixed(2) + ‘%’; noiValueEl.textContent = ‘$’ + Math.round(noiVal).toLocaleString(‘en-US’); ownerValueEl.textContent = ‘$’ + Math.round(ownerVal).toLocaleString(‘en-US’); } if (slider) { slider.addEventListener(‘input’, updateSlider); updateSlider(); } // ========================================== // NAVBAR SCROLL EFFECT // ========================================== const nav = document.getElementById(‘topNav’); let lastScroll = 0; window.addEventListener(‘scroll’, () => { const scrollY = window.scrollY; if (scrollY > 100) { nav.classList.add(‘scrolled’); } else { nav.classList.remove(‘scrolled’); } lastScroll = scrollY; }, { passive: true }); // ========================================== // MOBILE MENU TOGGLE // ========================================== const mobileToggle = document.getElementById(‘mobileToggle’); const navLinks = document.getElementById(‘navLinks’); if (mobileToggle) { mobileToggle.addEventListener(‘click’, () => { const isOpen = navLinks.style.display === ‘flex’; navLinks.style.display = isOpen ? ‘none’ : ‘flex’; navLinks.style.flexDirection = ‘column’; navLinks.style.position = ‘absolute’; navLinks.style.top = ’56px’; navLinks.style.left = ‘0’; navLinks.style.right = ‘0’; navLinks.style.background = ‘rgba(26,35,50,0.98)’; navLinks.style.padding = isOpen ? ‘0’ : ’20px’; navLinks.style.gap = ’16px’; navLinks.style.alignItems = ‘center’; if (isOpen) { navLinks.style.display = ”; navLinks.style.flexDirection = ”; navLinks.style.position = ”; navLinks.style.top = ”; navLinks.style.left = ”; navLinks.style.right = ”; navLinks.style.background = ”; navLinks.style.padding = ”; navLinks.style.gap = ”; navLinks.style.alignItems = ”; } }); } // ========================================== // SMOOTH SCROLL FOR NAV LINKS // ========================================== document.querySelectorAll(‘a[href^=”#”]’).forEach(link => { link.addEventListener(‘click’, (e) => { const href = link.getAttribute(‘href’); if (href === ‘#’) return; e.preventDefault(); const target = document.querySelector(href); if (target) { const offset = 92; // nav height const y = target.getBoundingClientRect().top + window.scrollY – offset; window.scrollTo({ top: y, behavior: ‘smooth’ }); } }); }); })();
Equal Housing OpportunityEqual Housing Opportunity. Information deemed reliable but not guaranteed. Source: SDMLS.