import React, { useState, useMemo } from 'react'; // --- SVG Icon Components (Kept Sparkles for AI tips) --- const SparklesIcon = () => ( ); const BuildingOfficeIcon = () => ( ); // Main App component for the Rent Affordability Calculator function App() {   // State variables to store user inputs and calculation results   const [monthlyIncome, setMonthlyIncome] = useState('');   const [desiredRent, setDesiredRent] = useState('');   const [monthlyDebt, setMonthlyDebt] = useState('');   const [selectedState, setSelectedState] = useState('');   const [selectedCity, setSelectedCity] = useState('');   const [affordabilityResult, setAffordabilityResult] = useState(null);   const [aiResponse, setAiResponse] = useState('');   const [loadingAI, setLoadingAI] = useState(false);   const [showModal, setShowModal] = useState(false);   const [modalMessage, setModalMessage] = useState(''); const [activeTab, setActiveTab] = useState('summary');   // State for Budgeting Tool   const [needsPercent, setNeedsPercent] = useState(50);   const [wantsPercent, setWantsPercent] = useState(30);   const [savingsPercent, setSavingsPercent] = useState(20);   // New state to track if a calculation has been run   const [calculationDone, setCalculationDone] = useState(false);   // Pre-defined data for states including Quality of Life metrics and cities   const rentalMarketData = {     states: {       'Alabama': { averageRent: 1040, type: 'affordable', historicalTrend: 'Generally affordable, steady growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 90 }, cities: [{ name: 'Birmingham', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 95 } }, { name: 'Montgomery', averageRent: 1000, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 22, greenSpaceAccess: 'Average', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 88 } }, { name: 'Huntsville', averageRent: 1100, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 18, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 92 } }, { name: 'Mobile', averageRent: 950, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 23, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 90 } }, { name: 'Tuscaloosa', averageRent: 1000, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 91 } }, { name: 'Hoover', averageRent: 1300, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Very Low', schoolRating: 'Excellent', amenityProximity: 'Car-dependent', averageCommuteTime: 25, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 105 } }, { name: 'Dothan', averageRent: 897, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 85 } }, { name: 'Auburn', averageRent: 1100, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 15, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 98 } }, { name: 'Decatur', averageRent: 752, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Average', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 80 } }, { name: 'Madison', averageRent: 1250, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Very Low', schoolRating: 'Excellent', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 100 } }] },       'Alaska': { averageRent: 1500, type: 'mixed', historicalTrend: 'Stable, moderate growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Limited', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 125 }, cities: [{ name: 'Anchorage', averageRent: 1450, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 120 } }, { name: 'Fairbanks', averageRent: 1300, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 15, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 130 } }, { name: 'Juneau', averageRent: 1600, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Limited', averageCommuteTime: 10, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 140 } }] },       'Arizona': { averageRent: 1800, type: 'expensive', historicalTrend: 'High growth post-pandemic, now moderating.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Car-dependent', averageCommuteTime: 28, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Moderate', costOfLivingIndex: 105 }, cities: [{ name: 'Phoenix', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Moderate', costOfLivingIndex: 105 } }, { name: 'Tucson', averageRent: 1400, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 98 } }, { name: 'Mesa', averageRent: 1700, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Moderate', costOfLivingIndex: 100 } }, { name: 'Chandler', averageRent: 1800, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 110 } }, { name: 'Scottsdale', averageRent: 2200, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 120 } }, { name: 'Glendale', averageRent: 1600, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 25, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Moderate', costOfLivingIndex: 100 } }, { name: 'Gilbert', averageRent: 1900, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Very Low', schoolRating: 'Excellent', amenityProximity: 'Car-dependent', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 115 } }, { name: 'Tempe', averageRent: 1750, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Average', publicTransitAvailability: 'Good', airQualityIndex: 'Moderate', costOfLivingIndex: 108 } }, { name: 'Peoria', averageRent: 1700, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Car-dependent', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 102 } }, { name: 'Surprise', averageRent: 1600, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 35, greenSpaceAccess: 'Average', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 98 } }] },       'Arkansas': { averageRent: 931, type: 'affordable', historicalTrend: 'Consistently affordable, slight growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 85 }, cities: [{ name: 'Little Rock', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 90 } }, { name: 'Fort Smith', averageRent: 900, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Average', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 82 } }, { name: 'Fayetteville', averageRent: 1100, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 15, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 95 } }, { name: 'Springdale', averageRent: 1000, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 90 } }, { name: 'Jonesboro', averageRent: 950, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 17, greenSpaceAccess: 'Average', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 88 } }] },       'California': {         averageRent: 2424, type: 'expensive', historicalTrend: 'Historically expensive, some moderation in 2025.',         qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Varies', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Moderate', costOfLivingIndex: 150 },         cities: [           { name: 'Los Angeles', averageRent: 2638, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Excellent', averageCommuteTime: 35, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Moderate', costOfLivingIndex: 160 } },           { name: 'San Diego', averageRent: 3203, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 155 } },           { name: 'San Jose', averageRent: 3329, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 170 } },           { name: 'San Francisco', averageRent: 3411, qualityOfLife: { walkabilityScore: 'Very High', crimeIndex: 'Moderate', schoolRating: 'Excellent', amenityProximity: 'Excellent', averageCommuteTime: 30, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Excellent', airQualityIndex: 'Moderate', costOfLivingIndex: 180 } },           { name: 'Fresno', averageRent: 1500, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'High', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Moderate', costOfLivingIndex: 105 } },           { name: 'Sacramento', averageRent: 1800, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 115 } },           { name: 'Long Beach', averageRent: 2200, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Moderate', costOfLivingIndex: 140 } },           { name: 'Oakland', averageRent: 2768, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'High', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Moderate', costOfLivingIndex: 165 } },           { name: 'Bakersfield', averageRent: 1300, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Below Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Average', publicTransitAvailability: 'None', airQualityIndex: 'Moderate', costOfLivingIndex: 95 } },           { name: 'Anaheim', averageRent: 2300, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 145 } }         ]       },       'Colorado': { averageRent: 2000, type: 'mixed', historicalTrend: 'Saw some rent declines in 2025.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 115 }, cities: [{ name: 'Denver', averageRent: 1950, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 118 } }, { name: 'Colorado Springs', averageRent: 1500, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 105 } }, { name: 'Aurora', averageRent: 1800, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 110 } }, { name: 'Fort Collins', averageRent: 1700, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 112 } }, { name: 'Lakewood', averageRent: 1850, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 22, greenSpaceAccess: 'Good', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 115 } }] },       'Connecticut': { averageRent: 1850, type: 'expensive', historicalTrend: 'Steady, above national average growth.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 120 }, cities: [{ name: 'Bridgeport', averageRent: 1700, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 115 } }, { name: 'New Haven', averageRent: 1800, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 125 } }, { name: 'Stamford', averageRent: 2400, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Excellent', averageCommuteTime: 30, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 150 } }, { name: 'Hartford', averageRent: 1600, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'High', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Average', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 110 } }, { name: 'Waterbury', averageRent: 1200, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Below Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 100 } }] },       'Delaware': { averageRent: 1700, type: 'expensive', historicalTrend: 'Consistent growth, relatively high.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 110 }, cities: [{ name: 'Wilmington', averageRent: 1650, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 108 } }, { name: 'Dover', averageRent: 1400, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Average', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 98 } }, { name: 'Newark', averageRent: 1500, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 105 } }] },       'Florida': {         averageRent: 2501, type: 'expensive', historicalTrend: 'High growth post-pandemic, some cities seeing declines due to oversupply.',         qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 110 },         cities: [           { name: 'Jacksonville', averageRent: 1600, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 95 } },           { name: 'Miami', averageRent: 2501, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Excellent', averageCommuteTime: 35, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Moderate', costOfLivingIndex: 120 } },           { name: 'Tampa', averageRent: 1900, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 105 } },           { name: 'Orlando', averageRent: 1850, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 103 } },           { name: 'St. Petersburg', averageRent: 1800, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 22, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 100 } },           { name: 'Hialeah', averageRent: 2000, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 30, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Moderate', costOfLivingIndex: 108 } },           { name: 'Fort Lauderdale', averageRent: 2300, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 115 } },           { name: 'Tallahassee', averageRent: 1400, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 92 } },           { name: 'Cape Coral', averageRent: 1700, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 98 } },           { name: 'Port St. Lucie', averageRent: 1900, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 100 } }         ]       },       'Georgia': { averageRent: 1650, type: 'mixed', historicalTrend: 'Mixed growth, some areas moderating.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'Medium', airQualityIndex: 'Good', costOfLivingIndex: 98 }, cities: [{ name: 'Atlanta', qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 105 } }, { name: 'Augusta', averageRent: 1300, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 88 } }, { name: 'Columbus', averageRent: 1200, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', averageCommuteTime: 18, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 85 } }, { name: 'Savannah', averageRent: 1500, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 95 } }, { name: 'Athens', averageRent: 1400, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 15, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 92 } }] },       'Hawaii': { averageRent: 2741, type: 'expensive', historicalTrend: 'Consistently the most expensive state.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 180 }, cities: [{ name: 'Honolulu', averageRent: 2508, qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 185 } }, { name: 'East Honolulu', averageRent: 2800, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Very Low', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 190 } }] },       'Idaho': { averageRent: 1550, type: 'mixed', historicalTrend: 'Strong growth, now stabilizing.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 95 }, cities: [{ name: 'Boise', averageRent: 1600, qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 98 } }, { name: 'Meridian', averageRent: 1550, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Car-dependent', averageCommuteTime: 22, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 95 } }, { name: 'Nampa', averageRent: 1300, qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 90 } }] },       'Illinois': { averageRent: 1700, type: 'mixed', historicalTrend: 'Experienced significant rent increases in Chicago.', qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Excellent', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Moderate', costOfLivingIndex: 110 }, cities: [{ name: 'Chicago', averageRent: 1900 }, { name: 'Aurora', averageRent: 1400 }, { name: 'Joliet', averageRent: 1300 }, { name: 'Naperville', averageRent: 1900 }, { name: 'Rockford', averageRent: 1000 }] },       'Indiana': { averageRent: 1200, type: 'affordable', historicalTrend: 'Affordable, steady growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 22, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 90 }, cities: [{ name: 'Indianapolis', averageRent: 1300 }, { name: 'Fort Wayne', averageRent: 1000 }, { name: 'Evansville', averageRent: 950 }, { name: 'South Bend', averageRent: 900 }, { name: 'Carmel', averageRent: 1600 }] },       'Iowa': { averageRent: 955, type: 'affordable', historicalTrend: 'Consistently affordable, low growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 85 }, cities: [{ name: 'Des Moines', averageRent: 1000 }, { name: 'Cedar Rapids', averageRent: 950 }, { name: 'Davenport', averageRent: 900 }] },       'Kansas': { averageRent: 1100, type: 'affordable', historicalTrend: 'Affordable, stable.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 88 }, cities: [{ name: 'Wichita', averageRent: 950 }, { name: 'Overland Park', averageRent: 1300 }, { name: 'Kansas City', averageRent: 1150 }] },       'Kentucky': { averageRent: 1049, type: 'affordable', historicalTrend: 'Affordable, moderate growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 88 }, cities: [{ name: 'Louisville', averageRent: 1200 }, { name: 'Lexington', averageRent: 1100 }, { name: 'Bowling Green', averageRent: 950 }] },       'Louisiana': { averageRent: 1051, type: 'affordable', historicalTrend: 'Affordable, stable.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'High', schoolRating: 'Below Average', amenityProximity: 'Mixed', averageCommuteTime: 25, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Moderate', costOfLivingIndex: 90 }, cities: [{ name: 'New Orleans', averageRent: 1400 }, { name: 'Baton Rouge', averageRent: 1100 }, { name: 'Shreveport', averageRent: 900 }] },       'Maine': { averageRent: 1600, type: 'mixed', historicalTrend: 'Moderate growth, becoming less affordable.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 105 }, cities: [{ name: 'Portland', averageRent: 1700 }, { name: 'Lewiston', averageRent: 1100 }] },       'Maryland': { averageRent: 2000, type: 'expensive', historicalTrend: 'Consistent high growth.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Excellent', amenityProximity: 'Good', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 120 }, cities: [{ name: 'Baltimore', averageRent: 1700 }, { name: 'Frederick', averageRent: 1900 }, { name: 'Rockville', averageRent: 2200 }] },       'Massachusetts': { averageRent: 2804, type: 'expensive', historicalTrend: 'High demand, limited new housing.', qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Excellent', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'Excellent', airQualityIndex: 'Good', costOfLivingIndex: 140 }, cities: [{ name: 'Boston', averageRent: 2920 }, { name: 'Worcester', averageRent: 1800 }, { name: 'Springfield', averageRent: 1300 }] },       'Michigan': { averageRent: 1300, type: 'affordable', historicalTrend: 'Affordable, steady growth.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 90 }, cities: [{ name: 'Detroit', averageRent: 1200 }, { name: 'Grand Rapids', averageRent: 1350 }, { name: 'Warren', averageRent: 1100 }, { name: 'Sterling Heights', averageRent: 1250 }, { name: 'Ann Arbor', averageRent: 1700 }] },       'Minnesota': { averageRent: 1500, type: 'mixed', historicalTrend: 'Moderate growth, diversified economy.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 22, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 100 }, cities: [{ name: 'Minneapolis', averageRent: 1600 }, { name: 'St. Paul', averageRent: 1500 }, { name: 'Rochester', averageRent: 1400 }] },       'Mississippi': { averageRent: 973, type: 'affordable', historicalTrend: 'Consistently affordable.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Below Average', amenityProximity: 'Car-dependent', averageCommuteTime: 20, greenSpaceAccess: 'Average', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 80 }, cities: [{ name: 'Jackson', averageRent: 1000 }, { name: 'Gulfport', averageRent: 900 }] },       'Missouri': { averageRent: 1200, type: 'affordable', historicalTrend: 'Affordable, stable growth.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 22, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 88 }, cities: [{ name: 'Kansas City', averageRent: 1300 }, { name: 'St. Louis', averageRent: 1250 }, { name: 'Springfield', averageRent: 950 }] },       'Montana': { averageRent: 1600, type: 'mixed', historicalTrend: 'Strong growth, now moderating.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 95 }, cities: [{ name: 'Billings', averageRent: 1200 }, { name: 'Missoula', averageRent: 1500 }] },       'Nebraska': { averageRent: 1150, type: 'affordable', historicalTrend: 'Low growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 88 }, cities: [{ name: 'Omaha', averageRent: 1100 }, { name: 'Lincoln', averageRent: 1000 }] },       'Nevada': { averageRent: 1750, type: 'expensive', historicalTrend: 'High growth, now slowing.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Average', publicTransitAvailability: 'Limited', airQualityIndex: 'Moderate', costOfLivingIndex: 105 }, cities: [{ name: 'Las Vegas', averageRent: 1700 }, { name: 'Henderson', averageRent: 1800 }, { name: 'Reno', averageRent: 1600 }] },       'New Hampshire': { averageRent: 2107, type: 'expensive', historicalTrend: 'Consistently expensive, steady growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Very Low', schoolRating: 'Excellent', amenityProximity: 'Car-dependent', averageCommuteTime: 25, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 120 }, cities: [{ name: 'Manchester', averageRent: 1900 }, { name: 'Nashua', averageRent: 2000 }] },       'New Jersey': { averageRent: 2027, type: 'expensive', historicalTrend: 'Consistently expensive, steady growth.', qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Low', schoolRating: 'Excellent', amenityProximity: 'Excellent', averageCommuteTime: 30, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 125 }, cities: [{ name: 'Newark', averageRent: 1800 }, { name: 'Jersey City', averageRent: 2800 }, { name: 'Paterson', averageRent: 1500 }, { name: 'Elizabeth', averageRent: 1700 }, { name: 'Trenton', averageRent: 1400 }] },       'New Mexico': { averageRent: 1300, type: 'mixed', historicalTrend: 'Moderate growth, mixed affordability.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 90 }, cities: [{ name: 'Albuquerque', averageRent: 1350 }, { name: 'Las Cruces', averageRent: 1000 }] },       'New York': { averageRent: 2765, type: 'expensive', historicalTrend: 'Very expensive, especially NYC metro.', qualityOfLife: { walkabilityScore: 'Very High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Excellent', averageCommuteTime: 35, greenSpaceAccess: 'Good', publicTransitAvailability: 'Excellent', airQualityIndex: 'Good', costOfLivingIndex: 150 }, cities: [{ name: 'New York City', averageRent: 4035 }, { name: 'Buffalo', averageRent: 1300 }, { name: 'Rochester', averageRent: 1250 }, { name: 'Yonkers', averageRent: 2200 }, { name: 'Syracuse', averageRent: 1100 }, { name: 'Albany', averageRent: 1400 }, { name: 'New Rochelle', averageRent: 2500 }, { name: 'Mount Vernon', averageRent: 2000 }, { name: 'Schenectady', averageRent: 1150 }, { name: 'Utica', averageRent: 900 }] },       'North Carolina': { averageRent: 1500, type: 'mixed', historicalTrend: 'Strong tech hub growth.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 95 }, cities: [{ name: 'Charlotte', averageRent: 1600 }, { name: 'Raleigh', averageRent: 1550 }, { name: 'Greensboro', averageRent: 1200 }, { name: 'Durham', averageRent: 1500 }, { name: 'Winston-Salem', averageRent: 1100 }] },       'North Dakota': { averageRent: 935, type: 'affordable', historicalTrend: 'Consistently affordable, low growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 15, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 90 }, cities: [{ name: 'Fargo', averageRent: 980 }, { name: 'Bismarck', averageRent: 950 }] },       'Ohio': { averageRent: 1350, type: 'affordable', historicalTrend: 'Midwest increases (Cincinnati).', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 22, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 90 }, cities: [{ name: 'Columbus', averageRent: 1400 }, { name: 'Cleveland', averageRent: 1100 }, { name: 'Cincinnati', averageRent: 1460 }, { name: 'Toledo', averageRent: 900 }, { name: 'Akron', averageRent: 950 }] },       'Oklahoma': { averageRent: 895, type: 'affordable', historicalTrend: 'Most affordable state.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 80 }, cities: [{ name: 'Oklahoma City', averageRent: 994 }, { name: 'Tulsa', averageRent: 1050 }, { name: 'Norman', averageRent: 900 }, { name: 'Broken Arrow', averageRent: 1100 }, { name: 'Lawton', averageRent: 772 }] },       'Oregon': { averageRent: 1800, type: 'expensive', historicalTrend: 'High growth, now moderating.', qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 115 }, cities: [{ name: 'Portland', averageRent: 1900 }, { name: 'Salem', averageRent: 1500 }, { name: 'Eugene', averageRent: 1400 }] },       'Pennsylvania': { averageRent: 1500, type: 'mixed', historicalTrend: 'Moderate growth, mixed affordability.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 100 }, cities: [{ name: 'Philadelphia', averageRent: 1800 }, { name: 'Pittsburgh', averageRent: 1300 }, { name: 'Allentown', averageRent: 1400 }, { name: 'Erie', averageRent: 900 }, { name: 'Reading', averageRent: 1100 }] },       'Rhode Island': { averageRent: 1900, type: 'expensive', historicalTrend: 'Consistent high growth.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 115 }, cities: [{ name: 'Providence', averageRent: 1850 }, { name: 'Warwick', averageRent: 1700 }] },       'South Carolina': { averageRent: 1400, type: 'mixed', historicalTrend: 'Moderate growth, mixed affordability.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 22, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 90 }, cities: [{ name: 'Charleston', averageRent: 1700 }, { name: 'Columbia', averageRent: 1300 }, { name: 'North Charleston', averageRent: 1500 }] },       'South Dakota': { averageRent: 974, type: 'affordable', historicalTrend: 'Consistently affordable.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 15, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 85 }, cities: [{ name: 'Sioux Falls', averageRent: 1050 }, { name: 'Rapid City', averageRent: 1100 }] },       'Tennessee': { averageRent: 1450, type: 'mixed', historicalTrend: 'Strong growth in metros, moderating.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 25, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 95 }, cities: [{ name: 'Nashville', averageRent: 1800 }, { name: 'Memphis', averageRent: 1200 }, { name: 'Knoxville', averageRent: 1300 }, { name: 'Chattanooga', averageRent: 1250 }, { name: 'Clarksville', averageRent: 1100 }] },       'Texas': { averageRent: 1600, type: 'mixed', historicalTrend: 'Mixed trends, Austin seeing declines.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Moderate', schoolRating: 'Average', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'Medium', airQualityIndex: 'Moderate', costOfLivingIndex: 95 }, cities: [{ name: 'Houston', averageRent: 1500 }, { name: 'San Antonio', averageRent: 1300 }, { name: 'Dallas', averageRent: 1650 }, { name: 'Austin', averageRent: 1385 }, { name: 'Fort Worth', averageRent: 1400 }, { name: 'El Paso', averageRent: 1000 }, { name: 'Arlington', averageRent: 1450 }, { name: 'Corpus Christi', averageRent: 1100 }, { name: 'Plano', averageRent: 1800 }, { name: 'Laredo', averageRent: 950 }] },       'Utah': { averageRent: 1700, type: 'expensive', historicalTrend: 'High growth, now stabilizing.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 20, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 105 }, cities: [{ name: 'Salt Lake City', averageRent: 1650 }, { name: 'West Valley City', averageRent: 1500 }, { name: 'Provo', averageRent: 1400 }] },       'Vermont': { averageRent: 1700, type: 'mixed', historicalTrend: 'Moderate growth, expensive region.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Very Low', schoolRating: 'Excellent', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 110 }, cities: [{ name: 'Burlington', averageRent: 1800 }, { name: 'South Burlington', averageRent: 1750 }] },       'Virginia': { averageRent: 1800, type: 'expensive', historicalTrend: 'Consistent high growth.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Above Average', amenityProximity: 'Good', averageCommuteTime: 28, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 105 }, cities: [{ name: 'Virginia Beach', averageRent: 1600 }, { name: 'Chesapeake', averageRent: 1700 }, { name: 'Norfolk', averageRent: 1500 }, { name: 'Richmond', averageRent: 1500 }, { name: 'Newport News', averageRent: 1400 }] },       'Washington': { averageRent: 2965, type: 'expensive', historicalTrend: 'Strong tech economy, high demand.', qualityOfLife: { walkabilityScore: 'High', crimeIndex: 'Moderate', schoolRating: 'Above Average', amenityProximity: 'Excellent', averageCommuteTime: 30, greenSpaceAccess: 'Excellent', publicTransitAvailability: 'Good', airQualityIndex: 'Good', costOfLivingIndex: 130 }, cities: [{ name: 'Seattle', averageRent: 2934 }, { name: 'Spokane', averageRent: 1500 }, { name: 'Tacoma', averageRent: 1800 }] },       'West Virginia': { averageRent: 914, type: 'affordable', historicalTrend: 'Consistently affordable, low growth.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 18, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 80 }, cities: [{ name: 'Charleston', averageRent: 950 }, { name: 'Huntington', averageRent: 850 }] },       'Wisconsin': { averageRent: 1300, type: 'affordable', historicalTrend: 'Affordable, steady growth.', qualityOfLife: { walkabilityScore: 'Medium', crimeIndex: 'Low', schoolRating: 'Average', amenityProximity: 'Mixed', averageCommuteTime: 20, greenSpaceAccess: 'Good', publicTransitAvailability: 'Limited', airQualityIndex: 'Good', costOfLivingIndex: 90 }, cities: [{ name: 'Milwaukee', averageRent: 1200 }, { name: 'Madison', averageRent: 1400 }] },       'Wyoming': { averageRent: 1200, type: 'affordable', historicalTrend: 'Affordable, stable.', qualityOfLife: { walkabilityScore: 'Low', crimeIndex: 'Very Low', schoolRating: 'Average', amenityProximity: 'Car-dependent', averageCommuteTime: 15, greenSpaceAccess: 'Good', publicTransitAvailability: 'None', airQualityIndex: 'Good', costOfLivingIndex: 95 }, cities: [{ name: 'Cheyenne', averageRent: 1150 }, { name: 'Casper', averageRent: 1000 }] },     },   };   // Mapping for common city name variations to standardized forms   const cityAliasMap = {     'st louis': 'St. Louis',     'st. louis': 'St. Louis',     'saint louis': 'St. Louis',     'la': 'Los Angeles',     'nyc': 'New York City',     'sf': 'San Francisco',     'kc': 'Kansas City',     'phx': 'Phoenix',     'nola': 'New Orleans',     'dc': 'Washington',     'atl': 'Atlanta',     'clt': 'Charlotte',     'raleigh nc': 'Raleigh',     'nash': 'Nashville',     'hou': 'Houston',     'sa': 'San Antonio',     'dal': 'Dallas',     'atx': 'Austin',     'dfw': 'Fort Worth',     'el paso': 'El Paso',     'cc': 'Corpus Christi',     'philly': 'Philadelphia',     'pitt': 'Pittsburgh',     'balt': 'Baltimore',     'bos': 'Boston',     'detroit': 'Detroit',     'minny': 'Minneapolis',     'st paul': 'St. Paul',     'okc': 'Oklahoma City',     'pdx': 'Portland',     'sea': 'Seattle',   };   // Function to display a custom modal message   const showCustomModal = (message) => {     setModalMessage(message);     setShowModal(true);   };   // Function to close the custom modal   const closeCustomModal = () => {     setShowModal(false);     setModalMessage('');   };   // Function to reset all inputs and results   const handleReset = () => {     setMonthlyIncome('');     setDesiredRent('');     setMonthlyDebt('');     setSelectedState('');     setSelectedCity('');     setAffordabilityResult(null);     setAiResponse('');     setLoadingAI(false);     setNeedsPercent(50);     setWantsPercent(30);     setSavingsPercent(20);     setCalculationDone(false); setActiveTab('summary');   };   // Helper function to convert string to Title Case   const toTitleCase = (str) => {     if (!str) return '';     return str.replace(       /\w\S*/g,       function(txt) {         return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();       }     );   };   // Helper function to get quality of life data   const getQolData = () => {     if (selectedState) {       if (selectedCity) {         const cityData = rentalMarketData.states[selectedState]?.cities.find(           city => city.name.toLowerCase() === selectedCity.toLowerCase()         );         return cityData?.qualityOfLife;       }       return rentalMarketData.states[selectedState]?.qualityOfLife;     }     return null;   };   // Handles the calculation of affordability and triggers AI response   const handleCalculate = async () => {     const income = parseFloat(monthlyIncome);     const rent = parseFloat(desiredRent);     const debt = parseFloat(monthlyDebt) || 0;     if (isNaN(income) || income <= 0) {       showCustomModal('Please enter a valid monthly income.');       return;     }     if (isNaN(rent) || rent <= 0) {       showCustomModal('Please enter a valid desired monthly rent.');       return;     }     if (isNaN(debt) || debt < 0) {       showCustomModal('Please enter a valid monthly debt (or 0 if none).');       return;     }     setCalculationDone(true);     let displayCityName = selectedCity.trim();     if (selectedState && displayCityName) {       const normalizedCityFromAlias = cityAliasMap[displayCityName.toLowerCase()];       if (normalizedCityFromAlias) {         displayCityName = normalizedCityFromAlias;       }       const foundCity = rentalMarketData.states[selectedState]?.cities.find(         city => city.name.toLowerCase() === displayCityName.toLowerCase()       );       if (foundCity) {         displayCityName = foundCity.name;       } else if (!normalizedCityFromAlias) {         displayCityName = toTitleCase(displayCityName);       }     }     setSelectedCity(displayCityName);     const incomeAfterDebt = income - debt;     if (incomeAfterDebt <= 0) {       showCustomModal('Your income after monthly debt is zero or negative. Please review your inputs.');       return;     }     const rentToIncomeRatio = (rent / incomeAfterDebt) * 100;     let status = '';     if (rentToIncomeRatio <= 30) {       status = 'Affordable';     } else if (rentToIncomeRatio > 30 && rentToIncomeRatio <= 50) {       status = 'Cost-Burdened';     } else {       status = 'Severely Cost-Burdened';     }     setAffordabilityResult({       ratio: rentToIncomeRatio.toFixed(2),       status: status,       incomeAfterDebt: incomeAfterDebt.toFixed(2),     });     await callGeminiAPI(income, rent, debt, incomeAfterDebt, rentToIncomeRatio, status, displayCityName);   };   // Function to call the Gemini API   const callGeminiAPI = async (income, rent, debt, incomeAfterDebt, ratio, status, displayCity) => {     setLoadingAI(true);     setAiResponse(''); // ==========================================     // INSERT YOUR API KEY BELOW     // ==========================================     const apiKey = "AIzaSyC1j2wT0AGAbbhg7UTOXfhuXESjtq19Crk"; // ==========================================     let prompt = `As an AI-powered rental market assistant, analyze the following user input and provide actionable tips and insights based on current U.S. rental market trends and the user's financial situation.     User's Monthly Income: $${income.toFixed(2)}     User's Monthly Debt: $${debt.toFixed(2)}     User's Income After Debt: $${incomeAfterDebt.toFixed(2)}     User's Desired Monthly Rent: $${rent.toFixed(2)}     Calculated Rent-to-Income Ratio (based on income after debt): ${ratio.toFixed(2)}%     Affordability Status: ${status}     Selected State: ${selectedState || 'Not specified'}     Selected City: ${displayCity || 'Not specified'}`;     try {       let chatHistory = [];       chatHistory.push({ role: "user", parts: [{ text: prompt }] });       const payload = { contents: chatHistory };       const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-09-2025:generateContent?key=${apiKey}`;       const response = await fetch(apiUrl, {         method: 'POST',         headers: { 'Content-Type': 'application/json' },         body: JSON.stringify(payload)       });       const result = await response.json();       if (result.candidates && result.candidates.length > 0 &&           result.candidates[0].content && result.candidates[0].content.parts &&           result.candidates[0].content.parts.length > 0) {         const text = result.candidates[0].content.parts[0].text;         setAiResponse(text);       } else {         setAiResponse('Could not get AI insights. Please try again.');       }     } catch (error) {       setAiResponse('Failed to get AI insights due to an error.');     } finally {       setLoadingAI(false);     }   };   // Function to render AI response with specific bolding and highlighting   const renderAiTips = (text) => {     const lines = text.split('\n');     return lines.map((line, index) => {       const trimmedLine = line.trim();       if (trimmedLine === '' || trimmedLine.startsWith('**')) return null;       const match = trimmedLine.match(/^(\d+\.\s)(.*?):(.*)/);       if (match) {         const boldPart = match[2].trim();         const restOfTip = match[3];         return (

{boldPart}:{restOfTip}

        );       } const simpleMatch = trimmedLine.match(/^(\d+\.\s)(.*)/); if (simpleMatch) { return (

{simpleMatch[2]}

) }       return

{trimmedLine}

;     });   }; const budgetData = useMemo(() => { const incomeNum = parseFloat(monthlyIncome) || 0; const debtNum = parseFloat(monthlyDebt) || 0; const incomeAfterDebt = incomeNum > debtNum ? incomeNum - debtNum : 0; return { incomeAfterDebt: incomeAfterDebt.toFixed(2), needsAmount: (incomeAfterDebt * (needsPercent / 100)).toFixed(2), wantsAmount: (incomeAfterDebt * (wantsPercent / 100)).toFixed(2), savingsAmount: (incomeAfterDebt * (savingsPercent / 100)).toFixed(2), }; }, [monthlyIncome, monthlyDebt, needsPercent, wantsPercent, savingsPercent]);   return (

Rent Affordability Calculator

Analyze your budget, get AI-powered insights, and plan your next move.

{/* --- INPUTS SECTION --- */}
{/* Monthly Income */}
setMonthlyIncome(e.target.value)} />
{/* Monthly Debt */}
setMonthlyDebt(e.target.value)} />
{/* Desired Rent */}
setDesiredRent(e.target.value)} />
{/* State Selection */}
{/* City Input */}
setSelectedCity(e.target.value)} />
{/* --- ACTION BUTTONS --- */}
{/* --- BANNER AD SPOT 1 --- */}
Banner Ad { e.target.onerror = null; e.target.src = 'https://placehold.co/728x90/334155/94a3b8?text=Ad+Load+Error'; }} />
{/* --- RESULTS SECTION with TABS --- */} {calculationDone && affordabilityResult && ( <>
{/* Tab Navigation */}
{/* Tab Content */}
{activeTab === 'summary' && (

Your Affordability Snapshot

Income After Debt: ${affordabilityResult.incomeAfterDebt}

Desired Rent of ${desiredRent} is {affordabilityResult.ratio}% of your available income.

Status: {affordabilityResult.status}

(A 30% ratio is generally considered affordable.)

)} {activeTab === 'aiInsights' && (

AI-Powered Tips & Insights

{loadingAI && (

Generating personalized tips...

)} {aiResponse && !loadingAI && (
{renderAiTips(aiResponse)}
)}
)} {activeTab === 'budgetPlanner' && (

Interactive Budget Planner

Based on the 50/30/20 rule. Adjust the sliders to fit your lifestyle.

{/* Needs */}

Rent, Utilities, Groceries

setNeedsPercent(parseInt(e.target.value))} className="w-full h-2 bg-slate-700 rounded-lg appearance-none cursor-pointer accent-sky-500" />

${budgetData.needsAmount}

{/* Wants */}

Dining, Entertainment

setWantsPercent(parseInt(e.target.value))} className="w-full h-2 bg-slate-700 rounded-lg appearance-none cursor-pointer accent-teal-500" />

${budgetData.wantsAmount}

{/* Savings */}

Investments, Debt Repayment

setSavingsPercent(parseInt(e.target.value))} className="w-full h-2 bg-slate-700 rounded-lg appearance-none cursor-pointer accent-indigo-500" />

${budgetData.savingsAmount}

Total Budgeted: ${(parseFloat(budgetData.needsAmount) + parseFloat(budgetData.wantsAmount) + parseFloat(budgetData.savingsAmount)).toFixed(2)} / Available: ${budgetData.incomeAfterDebt}

)} {activeTab === 'marketData' && selectedState && (

Market Data for {selectedCity || selectedState}

Rental Trends

The average rent in {selectedState} is around ${rentalMarketData.states[selectedState].averageRent}. {rentalMarketData.states[selectedState].historicalTrend}

{getQolData() && (

Quality of Life Metrics

Walkability: {getQolData().walkabilityScore}

Crime Index: {getQolData().crimeIndex}

School Rating: {getQolData().schoolRating}

Commute: {getQolData().averageCommuteTime} min

Cost of Living: {getQolData().costOfLivingIndex}

Green Space: {getQolData().greenSpaceAccess}

Note: These metrics are illustrative.

)}
)}
Banner Ad 2 { e.target.onerror = null; e.target.src = 'https://placehold.co/728x90/1e293b/475569?text=Ad+Load+Error'; }} />
)}
{/* --- MODAL and FOOTER --- */} {showModal && (

Input Error

{modalMessage}

)}
  ); } export default App;