:root { /* Brand */ --navy: #0a1628; --dark-blue: #0f2140; --mid-blue: #1a365d; --accent-green: #00d4aa; --accent-green-dim: #00b89a; --light-green: #ccfbef; --brand-accent: #6366f1; /* Grays */ --gray-50: #f8fafc; --gray-100: #f1f5f9; --gray-200: #e2e8f0; --gray-300: #cbd5e1; --gray-400: #94a3b8; --gray-500: #64748b; --gray-600: #475569; --gray-700: #334155; --gray-800: #1e293b; --gray-900: #0f172a; --white: #ffffff; /* Semantic */ --red: #ef4444; --red-light: #fee2e2; --green-light: #d1fae5; --amber: #f59e0b; --amber-light: #fef3c7; --blue: #3b82f6; --blue-light: #dbeafe; /* Shadows */ --shadow-xs: 0 1px 3px rgba(10,22,40,0.06); --shadow-sm: 0 2px 8px rgba(10,22,40,0.08); --shadow-md: 0 4px 20px rgba(10,22,40,0.10); --shadow-lg: 0 8px 32px rgba(10,22,40,0.12); /* Radius */ --radius-sm: 6px; --radius-md: 10px; --radius-lg: 14px; --radius-xl: 20px; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; color: var(--gray-800); background: var(--white); -webkit-font-smoothing: antialiased; line-height: 1.6; } /* ── NAV ── */ nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; background: rgba(255,255,255,0.95); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-bottom: 1px solid var(--gray-200); padding: 0 2rem; height: 64px; display: flex; align-items: center; justify-content: space-between; gap: 1rem; } .nav-logo { font-family: 'Space Grotesk', sans-serif; font-weight: 700; font-size: 1.2rem; color: var(--navy); text-decoration: none; display: flex; align-items: center; gap: 0.5rem; flex-shrink: 0; } .nav-logo-icon { width: 32px; height: 32px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; } .nav-logo-icon svg { width: 32px; height: 32px; display: block; } .nav-links { display: flex; gap: 1.5rem; list-style: none; align-items: center; flex-wrap: nowrap; } .nav-links a { font-size: 0.8375rem; font-weight: 500; color: var(--gray-600); text-decoration: none; transition: color 0.15s; white-space: nowrap; } .nav-links a:hover { color: var(--navy); } .nav-links a.active { color: var(--navy); font-weight: 600; } .nav-cta { background: var(--navy); color: var(--accent-green) !important; padding: 0.375rem 0.875rem; border-radius: 7px; font-weight: 600 !important; font-size: 0.8125rem !important; transition: background 0.15s !important; white-space: nowrap; } .nav-cta:hover { background: var(--dark-blue) !important; color: var(--accent-green) !important; } /* Legacy alias */ .nav-advisors-link { background: var(--navy); color: var(--accent-green) !important; padding: 0.375rem 0.875rem; border-radius: 7px; font-weight: 600 !important; font-size: 0.8125rem !important; transition: background 0.15s !important; } .nav-advisors-link:hover { background: var(--dark-blue) !important; } .nav-mobile-btn { display: none; background: none; border: 1.5px solid var(--gray-200); border-radius: 7px; width: 36px; height: 36px; cursor: pointer; align-items: center; justify-content: center; flex-shrink: 0; color: var(--navy); } .nav-mobile-btn svg { display: block; } .nav-new-badge { display: inline-block; font-size: 0.55rem; font-weight: 800; padding: 0.1rem 0.35rem; border-radius: 3px; background: var(--accent-green); color: #fff; vertical-align: middle; margin-left: 0.2rem; letter-spacing: 0.04em; } /* ── LAYOUT ── */ .container { max-width: 1200px; margin: 0 auto; padding: 0 2rem; } .page-header { padding: 7rem 0 3rem; } .page-wrap { max-width: 1200px; margin: 0 auto; padding: 7rem 2rem 4rem; } /* ── BREADCRUMB ── */ .breadcrumb { display: flex; align-items: center; gap: 0.4rem; font-size: 0.78rem; color: var(--gray-500); margin-bottom: 1.25rem; } .breadcrumb a { color: var(--gray-500); text-decoration: none; } .breadcrumb a:hover { color: var(--accent-green); } .breadcrumb span { color: var(--gray-400); } /* ── PAGE TYPOGRAPHY ── */ .page-label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--accent-green); margin-bottom: 0.6rem; } .page-title { font-family: 'Space Grotesk', sans-serif; font-size: 2.75rem; font-weight: 700; color: var(--navy); line-height: 1.12; letter-spacing: -0.025em; margin-bottom: 1rem; } .page-subtitle { font-size: 1.05rem; color: var(--gray-500); line-height: 1.75; max-width: 620px; } /* ── SECTION ── */ .section { padding: 3rem 0; border-top: 1px solid var(--gray-100); } .section-label { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--accent-green); margin-bottom: 0.5rem; } .section-title { font-family: 'Space Grotesk', sans-serif; font-size: 1.35rem; font-weight: 700; color: var(--navy); margin-bottom: 1.5rem; letter-spacing: -0.01em; } .section-subtitle { font-size: 0.95rem; color: var(--gray-500); margin-bottom: 2rem; line-height: 1.7; max-width: 560px; } /* ── CARDS ── */ .card { background: var(--white); border: 1px solid var(--gray-200); border-radius: var(--radius-lg); overflow: hidden; } .card-hover { transition: border-color 0.2s, box-shadow 0.2s, transform 0.2s; } .card-hover:hover { border-color: var(--accent-green); box-shadow: var(--shadow-md); transform: translateY(-2px); } .card-body { padding: 1.5rem; } /* ── BUTTONS ── */ .btn { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.625rem 1.25rem; border-radius: 8px; font-size: 0.875rem; font-weight: 600; font-family: inherit; cursor: pointer; border: none; transition: all 0.15s; text-decoration: none; white-space: nowrap; line-height: 1; } .btn-primary { background: var(--navy); color: var(--accent-green); } .btn-primary:hover { background: var(--dark-blue); } .btn-green { background: var(--accent-green); color: var(--white); } .btn-green:hover { background: var(--accent-green-dim); } .btn-outline { background: var(--white); color: var(--navy); border: 1.5px solid var(--gray-200); } .btn-outline:hover { border-color: var(--navy); background: var(--gray-50); } .btn-ghost { background: var(--gray-100); color: var(--gray-700); } .btn-ghost:hover { background: var(--gray-200); } .btn-danger { background: var(--red-light); color: var(--red); } .btn-danger:hover { background: #fecaca; } .btn-sm { padding: 0.375rem 0.75rem; font-size: 0.8rem; border-radius: 6px; } .btn-lg { padding: 0.8rem 1.75rem; font-size: 1rem; border-radius: 10px; } /* ── BADGES ── */ .badge { display: inline-block; padding: 0.2rem 0.625rem; border-radius: 100px; font-size: 0.72rem; font-weight: 600; line-height: 1.4; } .badge-green { background: var(--green-light); color: #065f46; } .badge-red { background: var(--red-light); color: #991b1b; } .badge-blue { background: var(--blue-light); color: #1d4ed8; } .badge-amber { background: var(--amber-light); color: #92400e; } .badge-gray { background: var(--gray-100); color: var(--gray-600); } .badge-navy { background: var(--navy); color: var(--accent-green); } /* ── STAT CARDS ── */ .stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; margin-bottom: 2rem; } .stat-card { background: var(--white); border: 1px solid var(--gray-200); border-radius: var(--radius-lg); padding: 1.25rem 1.5rem; } .stat-label { font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--gray-400); margin-bottom: 0.5rem; } .stat-value { font-family: 'Space Grotesk', sans-serif; font-size: 1.75rem; font-weight: 700; color: var(--navy); line-height: 1; } .stat-value.green { color: var(--accent-green); } .stat-value.red { color: var(--red); } .stat-sub { font-size: 0.75rem; color: var(--gray-400); margin-top: 0.35rem; } /* ── DATA TABLE ── */ .data-table { width: 100%; border-collapse: collapse; font-size: 0.875rem; } .data-table th { text-align: left; padding: 0.75rem 1rem; font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--gray-400); border-bottom: 2px solid var(--gray-200); background: var(--gray-50); } .data-table td { padding: 0.9rem 1rem; border-bottom: 1px solid var(--gray-100); color: var(--gray-700); vertical-align: middle; } .data-table tr:last-child td { border-bottom: none; } .data-table tr:hover td { background: var(--gray-50); } .data-table .ticker-col { font-family: 'Space Grotesk', sans-serif; font-weight: 700; color: var(--navy); font-size: 0.9rem; } .risks-table { width: 100%; border-collapse: collapse; font-size: 0.9rem; } .risks-table th { text-align: left; padding: 0.75rem 1rem; font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--gray-400); border-bottom: 2px solid var(--gray-200); background: var(--gray-50); } .risks-table td { padding: 0.9rem 1rem; border-bottom: 1px solid var(--gray-100); vertical-align: top; color: var(--gray-700); line-height: 1.6; } .risks-table td:first-child { font-weight: 600; color: var(--navy); white-space: nowrap; } .risks-table tr:last-child td { border-bottom: none; } .risks-table tr:hover td { background: var(--gray-50); } /* ── FORMS ── */ .form-group { margin-bottom: 1.1rem; } .form-label { display: block; font-size: 0.8rem; font-weight: 600; color: var(--gray-600); margin-bottom: 0.4rem; } .form-input, .form-select, .form-textarea { width: 100%; padding: 0.65rem 0.9rem; border: 1.5px solid var(--gray-200); border-radius: 8px; font-size: 0.875rem; font-family: inherit; color: var(--gray-800); background: var(--white); transition: border-color 0.15s, box-shadow 0.15s; -webkit-appearance: none; } .form-input:focus, .form-select:focus, .form-textarea:focus { outline: none; border-color: var(--accent-green); box-shadow: 0 0 0 3px rgba(16,185,129,0.1); } .form-textarea { resize: vertical; min-height: 80px; } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } .form-actions { display: flex; gap: 0.75rem; justify-content: flex-end; margin-top: 1.5rem; } /* ── EMPTY STATE ── */ .empty-state { text-align: center; padding: 4rem 2rem; } .empty-icon { font-size: 2.5rem; margin-bottom: 1rem; opacity: 0.5; } .empty-title { font-family: 'Space Grotesk', sans-serif; font-size: 1.2rem; font-weight: 700; color: var(--navy); margin-bottom: 0.5rem; } .empty-text { font-size: 0.9rem; color: var(--gray-400); margin-bottom: 1.5rem; line-height: 1.6; } /* ── SUB NAV ── */ .sub-nav { display: flex; gap: 0.25rem; margin-bottom: 2rem; border-bottom: 1px solid var(--gray-200); } .sub-nav a { padding: 0.65rem 1.25rem; font-size: 0.875rem; font-weight: 500; color: var(--gray-500); text-decoration: none; border-bottom: 2px solid transparent; margin-bottom: -1px; transition: all 0.15s; } .sub-nav a:hover { color: var(--navy); } .sub-nav a.active { color: var(--navy); font-weight: 600; border-bottom-color: var(--accent-green); } /* ── MODAL ── */ .modal-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.4); z-index: 200; align-items: center; justify-content: center; backdrop-filter: blur(4px); } .modal-overlay.open { display: flex; } .modal { background: var(--white); border-radius: var(--radius-xl); padding: 2rem; width: 100%; max-width: 520px; max-height: 90vh; overflow-y: auto; box-shadow: var(--shadow-lg); } .modal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem; } .modal-title { font-family: 'Space Grotesk', sans-serif; font-size: 1.25rem; font-weight: 700; color: var(--navy); } .modal-close { background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--gray-400); line-height: 1; padding: 0; } .modal-close:hover { color: var(--gray-700); } /* ── FOOTER ── */ footer { background: var(--navy); color: var(--gray-400); padding: 3.5rem 2rem 2rem; margin-top: 5rem; } .footer-inner { max-width: 1200px; margin: 0 auto; } .footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 3rem; padding-bottom: 2.5rem; border-bottom: 1px solid rgba(255,255,255,0.08); margin-bottom: 2rem; } .footer-brand .footer-logo { font-family: 'Space Grotesk', sans-serif; font-weight: 700; font-size: 1.1rem; color: var(--white); text-decoration: none; display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.875rem; } .footer-brand .footer-logo-icon { width: 28px; height: 28px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; } .footer-brand .footer-logo-icon svg { width: 28px; height: 28px; display: block; } .footer-brand p { font-size: 0.82rem; color: var(--gray-500); line-height: 1.7; max-width: 240px; } .footer-col-title { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; color: var(--gray-400); margin-bottom: 1rem; } .footer-links { list-style: none; display: flex; flex-direction: column; gap: 0.5rem; } .footer-links a { font-size: 0.82rem; color: var(--gray-500); text-decoration: none; transition: color 0.15s; } .footer-links a:hover { color: var(--accent-green); } .footer-bottom { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 0.75rem; } .footer-bottom p { font-size: 0.78rem; color: var(--gray-600); } .footer-legal { display: flex; gap: 1.25rem; } .footer-legal a { font-size: 0.78rem; color: var(--gray-600); text-decoration: none; transition: color 0.15s; } .footer-legal a:hover { color: var(--gray-400); } /* ── RESPONSIVE ── */ @media (max-width: 1100px) { .nav-links { gap: 1rem; } .footer-grid { grid-template-columns: 1fr 1fr 1fr; } .footer-brand { grid-column: 1 / -1; } .stat-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 900px) { .nav-links { display: none; } .nav-links.open { display: flex; flex-direction: column; position: absolute; top: 64px; left: 0; right: 0; background: var(--white); border-bottom: 1px solid var(--gray-200); padding: 1rem 2rem; gap: 0.25rem; box-shadow: var(--shadow-md); z-index: 99; } .nav-links.open li { width: 100%; } .nav-links.open a { display: block; padding: 0.5rem 0; font-size: 0.9rem; } .nav-mobile-btn { display: flex; } .page-title { font-size: 2.1rem; } .footer-grid { grid-template-columns: 1fr 1fr; gap: 2rem; } } @media (max-width: 600px) { .page-title { font-size: 1.75rem; } .stat-grid { grid-template-columns: 1fr 1fr; } .footer-grid { grid-template-columns: 1fr; gap: 1.5rem; } .footer-bottom { flex-direction: column; align-items: flex-start; gap: 0.5rem; } .form-row { grid-template-columns: 1fr; } } /* ── Data Freshness Badge ─────────────────────────────────────────── */ .dfb-badge { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.22rem 0.7rem; border-radius: 100px; font-size: 0.72rem; font-weight: 600; cursor: pointer; user-select: none; transition: opacity 0.15s; border: 1px solid; position: relative; text-decoration: none; } .dfb-loading { background:rgba(100,116,139,0.1); border-color:rgba(100,116,139,0.2); color:#64748b; } .dfb-green { background:rgba(16,185,129,0.12); border-color:rgba(16,185,129,0.3); color:#10b981; } .dfb-yellow { background:rgba(245,158,11,0.1); border-color:rgba(245,158,11,0.3); color:#f59e0b; } .dfb-red { background:rgba(239,68,68,0.1); border-color:rgba(239,68,68,0.3); color:#ef4444; } .dfb-dot { width:7px; height:7px; border-radius:50%; background:currentColor; flex-shrink:0; } .dfb-loading .dfb-dot { animation: dfb-pulse 1.5s ease-in-out infinite; } @keyframes dfb-pulse { 0%,100%{opacity:0.3} 50%{opacity:1} } .dfb-tooltip { position:absolute; top:calc(100% + 8px); left:50%; transform:translateX(-50%); background:#0a1628; border:1px solid rgba(255,255,255,0.13); border-radius:10px; padding:0.75rem 0.875rem; min-width:270px; max-width:340px; z-index:9999; box-shadow:0 8px 32px rgba(0,0,0,0.5); text-align:left; white-space:normal; pointer-events:none; } .dfb-tooltip.dfb-tip-open { pointer-events:auto; } .dfb-tooltip.dfb-hidden { display:none; } .dfb-tip-head { font-size:0.7rem; font-weight:700; color:#94a3b8; text-transform:uppercase; letter-spacing:0.07em; margin-bottom:0.5rem; } .dfb-tip-row { display:flex; justify-content:space-between; align-items:center; padding:0.2rem 0; font-size:0.75rem; color:#e2e8f0; gap:0.5rem; border-bottom:1px solid rgba(255,255,255,0.06); } .dfb-tip-row:last-of-type { border-bottom:none; } .dfb-tip-meta { color:#64748b; font-size:0.69rem; white-space:nowrap; } .dfb-tip-footer { margin-top:0.6rem; padding-top:0.5rem; border-top:1px solid rgba(255,255,255,0.08); } .dfb-tip-footer a { color:#10b981; font-size:0.75rem; text-decoration:none; font-weight:600; } .dfb-stale-notice { display:none; margin-top:0.75rem; padding:0.6rem 0.875rem; background:rgba(239,68,68,0.06); border:1px solid rgba(239,68,68,0.2); border-radius:8px; font-size:0.8rem; color:#ef4444; line-height:1.5; } .dfb-stale-notice a { color:#ef4444; font-weight:600; }
2025 Mortgage & Refinancing Fee Guide

🏠 How Much Do Mortgage Brokers and Refinancing Cost?

Mortgage broker fees and refinancing costs in 2025. Origination fees 0%–1%, closing costs 2%–5%, broker fee 0.5%–2.75%. Full mortgage cost breakdown from official sources.

✓ Official Sources CFPB.govFreddie Mac (PMMS weekly survey)NMLS Consumer AccessHUD.govBankrate
MarketplaceCost Guides › How Much Do Mortgage Brokers and Refinancing Cost?
Buying or refinancing a home involves several layers of fees. Origination fees (if any) are paid to your lender. Closing costs cover third-party services (title, appraisal, attorney). If you use a mortgage broker, they earn a fee from either you or the lender. Understanding all fees upfront prevents surprises at closing.
Service Level Low End High End Notes
Mortgage Origination Fee 0% 1% of loan Better Mortgage charges $0. Rocket Mortgage varies. Some lenders offer "no-origination" at a slightly higher rate — compare APR not just rate
Appraisal Fee $300 $800 Required by most lenders. FHA/VA appraisals may cost more. Paid upfront before closing
Title Insurance + Search $500 $2,000 Lender's title policy required; owner's policy optional but recommended. Cost varies by state and loan amount
Total Closing Costs (Purchase) 2% of price 5% of price On a $400,000 home: $8,000–$20,000 total closing costs. Includes all lender + third-party fees. Some states (NY, PA) run higher
Refinance Closing Costs $2,000 $8,000 Typically 0.5%–1.5% of loan. Streamline refinances (FHA, VA) have lower costs. Calculate break-even: closing costs ÷ monthly savings
Mortgage Broker Fee 0.5% 2.75% of loan Can be borrower-paid or lender-paid. CFPB limits total broker compensation to 3% of loan on qualified mortgages
Points (Optional) 1% per point 1% per point Each point costs 1% of loan and typically reduces rate by 0.25%. Only worth buying if you stay 5+ years

💡 Expert Tips

Top Vendors in This Category

LendingTree

Free to compare; lender fees apply
Best multi-lender comparison
Visit site ↗

Rocket Mortgage

Competitive; origination varies
Best digital + phone hybrid
Visit site ↗

Better Mortgage

$0 origination fee
Best for fully digital close
Visit site ↗

Credible

Free comparison
Best rate transparency
Visit site ↗
Disclaimer: All pricing ranges are estimates based on data sourced from CFPB.gov, Freddie Mac (PMMS weekly survey), NMLS Consumer Access, HUD.gov, Bankrate as of 2025. Actual costs vary significantly based on individual circumstances, location, complexity, and provider. This is not financial, legal, or tax advice. FinanceStackHub does not guarantee the accuracy of these figures. Always obtain multiple quotes and conduct your own due diligence.
📈 THE FINANCE STACK

Get your weekly market edge. Free.

Market pulse, stock spotlights, and actionable frameworks — delivered every week.

No spam · Unsubscribe anytime · View all issues →