/* Prevent empty page flash */
main { min-height: 500px; }
header { min-height: 80px; }
.tactical-grid-bg{position:relative}.tactical-grid-bg::before{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(255,102,0,0.02) 1px,transparent 1px),linear-gradient(90deg,rgba(255,102,0,0.02) 1px,transparent 1px);background-size:50px 50px;pointer-events:none;z-index:0;animation:grid-drift 20s linear infinite}@keyframes grid-drift{0%{background-position:0 0}100%{background-position:50px 50px}}.tactical-grid-bg>*{position:relative;z-index:1}
/* Skip-link / Accessibility */
.skip-link { position: absolute; top: -100px; left: 0; background: #FF6B00; color: #fff; padding: 8px 16px; z-index: 10000; font-size: 0.85rem; border-radius: 0 0 4px 0; text-decoration: none; }
.skip-link:focus { top: 0; }
.est-container { max-width: 940px; margin: 0 auto; padding: 120px 20px 60px; }
.hero-title { text-align: center; margin-bottom: 40px; }
.hero-title h1 { color: #fff; font-family: 'Oswald','Inter',sans-serif; font-size: 2.6rem; font-weight: 700; margin: 0 0 14px 0; line-height: 1.15; }
.hero-title h1 .accent { color: var(--orange); }
.hero-title p { color: #aaa; font-size: 1.02rem; line-height: 1.7; max-width: 760px; margin: 0 auto 24px; }
.hero-cta { display: flex; justify-content: center; gap: 16px; flex-wrap: wrap; margin-bottom: 28px; }
.hero-cta .btn { display: inline-flex; align-items: center; gap: 8px; padding: 14px 30px; border-radius: 8px; font-weight: 800; font-size: 0.92rem; text-transform: uppercase; letter-spacing: 0.05em; text-decoration: none; transition: all 0.3s; }
.hero-cta .btn-primary { background: linear-gradient(135deg, #FF6B00, #FF8533); color: #000; }
.hero-cta .btn-primary:hover { background: linear-gradient(135deg, #FF8533, #FF9E4D); transform: translateY(-1px); box-shadow: 0 8px 30px rgba(255,102,0,0.3); }
.hero-cta .btn-ghost { border: 1px solid rgba(255,255,255,0.2); color: #fff; }
.hero-cta .btn-ghost:hover { border-color: var(--orange); color: var(--orange); }
.est-card { background: rgba(10,10,10,0.8); border: 1px solid rgba(255,255,255,0.08); border-radius: 16px; padding: 40px; box-shadow: 0 0 60px rgba(255,102,0,0.04); }
.est-card h2 { color: #fff; font-family: 'Oswald','Inter',sans-serif; font-size: 1.5rem; margin-bottom: 6px; }
.est-card .subtitle { color: #999; font-size: 0.9rem; margin-bottom: 30px; }
.form-group { margin-bottom: 24px; }
.form-group label { display: flex; justify-content: space-between; align-items: baseline; color: #ddd; font-weight: 600; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 10px; }
.form-group label i { color: var(--orange); margin-right: 6px; }
.form-group label .val-badge { color: var(--orange); font-weight: 800; font-size: 1rem; text-transform: none; letter-spacing: 0; }
.form-group input[type="number"] { width: 100%; padding: 14px 16px; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.12); border-radius: 8px; color: #fff; font-size: 0.95rem; font-family: inherit; box-sizing: border-box; transition: border-color 0.3s; }
.form-group input[type="number"]:focus { outline: none; border-color: var(--orange); box-shadow: 0 0 0 3px rgba(255,102,0,0.15); }
.form-group input[type="number"]:hover { border-color: rgba(255,255,255,0.25); }
.form-group input[type="number"]::placeholder { color: #666; }
.form-group input.invalid { border-color: #ff4444; box-shadow: 0 0 0 3px rgba(255,68,68,0.15); }
.check-wrap { display: flex; align-items: flex-start; gap: 12px; padding: 16px 18px; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.08); border-radius: 10px; cursor: pointer; transition: border-color 0.3s; }
.check-wrap:hover { border-color: rgba(255,107,0,0.4); }
.check-wrap input[type="checkbox"] { width: 20px; height: 20px; flex-shrink: 0; margin-top: 2px; accent-color: #FF6B00; cursor: pointer; }
.check-wrap .check-text { color: #ddd; font-size: 0.9rem; line-height: 1.6; text-transform: none; letter-spacing: 0; font-weight: 500; }
.check-wrap .check-text strong { color: #fff; }
.check-wrap .check-text small { display: block; color: #888; font-size: 0.78rem; margin-top: 2px; }
.validation-msg { display: none; margin-top: 18px; padding: 14px 18px; background: rgba(255,68,68,0.08); border: 1px solid rgba(255,68,68,0.4); border-radius: 10px; color: #ffb3b3; font-size: 0.88rem; line-height: 1.7; }
.validation-msg.show { display: block; }
.validation-msg ul { margin: 4px 0 0 18px; padding: 0; }
.validation-msg .warn { color: #ffd479; }
.result-panel { margin-top: 32px; padding: 32px; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.08); border-radius: 12px; }
.result-panel.hidden { display: none; }
.result-top { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; margin-bottom: 24px; }
.result-label { color: #999; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.1em; }
.status-badge { display: inline-block; margin-top: 4px; padding: 5px 14px; border-radius: 999px; font-size: 0.85rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.04em; }
.status-badge.good { background: rgba(0,255,136,0.12); color: #4dff9e; border: 1px solid rgba(0,255,136,0.35); }
.status-badge.watch { background: rgba(255,212,121,0.12); color: #ffd479; border: 1px solid rgba(255,212,121,0.35); }
.status-badge.soon { background: rgba(255,107,0,0.15); color: #ff8c3a; border: 1px solid rgba(255,107,0,0.45); }
.status-badge.overdue { background: rgba(255,68,68,0.12); color: #ff6b6b; border: 1px solid rgba(255,68,68,0.45); }
.proj-line { margin-top: 6px; font-size: 1.05rem; }
.proj-line strong { color: #fff; font-size: 1.5rem; }
.proj-line span { color: #bbb; }
.stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 16px; margin: 20px 0; }
.stat-box { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); border-radius: 10px; padding: 16px; text-align: center; }
.stat-box .value { font-size: 1.2rem; font-weight: 700; color: var(--orange); margin-bottom: 4px; line-height: 1.35; }
.stat-box .label { font-size: 0.68rem; color: #888; text-transform: uppercase; letter-spacing: 0.05em; line-height: 1.5; }
.cmp-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 20px 0; }
.cmp-card { border-radius: 12px; padding: 20px; border: 1px solid rgba(255,255,255,0.1); background: rgba(255,255,255,0.02); }
.cmp-card.now { border-color: rgba(255,107,0,0.4); }
.cmp-card.defer { border-color: rgba(255,255,255,0.12); }
.cmp-card h4 { color: #fff; font-size: 0.95rem; text-transform: uppercase; letter-spacing: 0.05em; margin: 0 0 14px 0; }
.cmp-card.now h4 { color: var(--orange); }
.cmp-row { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; padding: 8px 0; border-bottom: 1px dashed rgba(255,255,255,0.07); font-size: 0.82rem; color: #aaa; }
.cmp-row strong { color: #eee; font-size: 0.88rem; text-align: right; }
.cmp-total { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; padding-top: 12px; margin-top: 4px; }
.cmp-total span { color: #999; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.08em; }
.cmp-total strong { color: #fff; font-size: 1.15rem; }
.cmp-card.now .cmp-total strong { color: var(--orange); }
.verdict-banner { margin: 8px 0 4px; padding: 16px 20px; border-radius: 10px; font-size: 0.92rem; line-height: 1.7; background: rgba(255,107,0,0.07); border: 1px solid rgba(255,107,0,0.3); color: #eee; }
.verdict-banner strong { color: var(--orange); }
.verdict-banner.wash { background: rgba(255,212,121,0.06); border-color: rgba(255,212,121,0.3); }
.verdict-banner.wash strong { color: #ffd479; }
.range-note { font-size: 0.8rem; color: #888; margin-top: 12px; font-style: italic; line-height: 1.7; }
.result-cta { display: flex; justify-content: center; align-items: center; gap: 14px; flex-wrap: wrap; margin-top: 22px; padding-top: 22px; border-top: 1px solid rgba(255,255,255,0.06); }
.result-cta .btn { display: inline-flex; align-items: center; gap: 8px; padding: 13px 26px; background: var(--orange); color: #000; font-weight: 800; text-decoration: none; border-radius: 8px; font-size: 0.9rem; text-transform: uppercase; letter-spacing: 0.05em; transition: all 0.3s; }
.result-cta .btn:hover { background: #FF8533; box-shadow: 0 8px 30px rgba(255,102,0,0.3); }
.result-cta .btn-ghost { background: transparent; color: #fff; border: 1px solid rgba(255,255,255,0.2); }
.result-cta .btn-ghost:hover { border-color: var(--orange); color: var(--orange); box-shadow: none; }
.section-block { margin-top: 20px; padding: 40px 0; }
.section-block h3 { color: #fff; font-family: 'Oswald','Inter',sans-serif; font-size: 1.4rem; margin-bottom: 24px; }
.step-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 24px; }
.step-card { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.06); border-radius: 12px; padding: 26px 24px; position: relative; }
.step-num { display: inline-flex; align-items: center; justify-content: center; width: 42px; height: 42px; border-radius: 50%; background: rgba(255,107,0,0.15); border: 1px solid rgba(255,107,0,0.4); color: var(--orange); font-weight: 900; font-size: 1.1rem; margin-bottom: 14px; }
.step-card h4 { color: var(--orange); font-size: 0.95rem; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 12px; }
.step-card p { color: #bbb; font-size: 0.85rem; line-height: 1.7; }
.step-card a { color: var(--orange); }
.faq-accordion { max-width: 860px; }
.faq-item { border: 1px solid rgba(255,255,255,0.1); border-radius: 12px; margin-bottom: 12px; overflow: hidden; background: rgba(255,255,255,0.03); transition: border-color 0.3s; }
.faq-item.open { border-color: rgba(255,107,0,0.4); }
.faq-q { display: flex; justify-content: space-between; align-items: center; width: 100%; padding: 18px 20px; background: transparent; border: none; color: #eee; font-size: 0.95rem; font-weight: 600; text-align: left; cursor: pointer; font-family: inherit; }
.faq-q .icon { color: var(--orange); flex-shrink: 0; margin-left: 14px; transition: transform 0.3s; }
.faq-item.open .faq-q .icon { transform: rotate(45deg); }
.faq-a { display: none; padding: 0 20px 18px; color: #aaa; font-size: 0.88rem; line-height: 1.7; }
.faq-item.open .faq-a { display: block; }
.faq-a a { color: var(--orange); }
@keyframes pulse-live { 0% { opacity: 1; } 50% { opacity: 0.3; } 100% { opacity: 1; } }
@media (max-width: 768px) {
.est-card { padding: 24px 20px; }
.hero-title h1 { font-size: 2rem; }
.cmp-grid { grid-template-columns: 1fr; }
}
@media (max-width: 480px) {
.stat-grid { grid-template-columns: 1fr; }
.hero-cta .btn { width: 100%; justify-content: center; }
}
Skip to main content
Roof Replacement Payback Calculator
Should you replace your roof now, or wait? Enter your roof’s age, expected material life, replacement cost, and monthly energy bill — and see your projected replacement timing, a 10-year “replace now vs. defer” cost comparison, energy savings potential, and the insurance discount Class 4 shingles can earn. Built from Tulsa market data and 12+ years of local installation experience.
4.9/5 Google Rating
BBB A+ Accredited
GAF Master Elite®
12+ Years Local
Calculate Your Roof Payback
Enter your numbers — your replacement timeline and 10-year cost comparison update instantly. All figures in USD, Tulsa metro.
Upgrade Options
Upgrade to energy-efficient / impact-resistant shingles (Class 4)
~25% premium over standard architectural — earns 5–15% energy savings and 15–25% insurance premium discount potential.
Roof Status
Calculating…
Expected Replacement Timing
—
10-Year Cost Comparison
Replace now vs. defer
scroll to see the breakdown
—
Est. Energy Savings / Yr
—
Class 4 Insurance Discount Potential
—
Total Annual Benefits (upgrade)
Replace Now
Replacement cost (upfront) —
Energy + insurance savings (10 yr) —
Repair / leak risk (10 yr) —
10-Year Total —
Defer Replacement
Replacement cost (within window) —
Energy + insurance savings (10 yr) —
Repair / leak risk (10 yr) —
10-Year Total —
How It Works — 3 Simple Steps
2
Review Your Options
Get a line-item proposal with standard architectural or Class 4 impact-resistant options, plus honest guidance on energy savings, insurance discounts, and the right timing for your roof. Storm claim? We handle the insurance paperwork.
3
Install & Start Saving
Our crew installs your new roof with manufacturer-certified workmanship, full cleanup, and a 3-year workmanship warranty — 3x the Oklahoma minimum. Your new roof starts paying you back immediately.
Frequently Asked Questions
When should I replace my roof instead of repairing it?
As a rule of thumb, if your roof is past 75% of its expected life, has widespread shingle loss, curling, or granule wear, or has already leaked, replacement is usually the smarter investment than repeated repairs. Run the payback calculator above with your roof’s age and material life, then call
(918) 734-4444 for a free inspection and honest recommendation.
How do I know how many years my roof has left?
Subtract your roof’s current age from the expected life of the material: architectural shingles typically last 25–30 years, Class 4 impact-resistant shingles 30–40 years, and metal 40–60 years. The calculator above projects your replacement year automatically. A free on-site inspection from Proof Construction can confirm the true condition beneath the surface.
Does replacing my roof save money on energy bills?
Yes. A new roof with modern ventilation, cool-roof shingles, and tighter decking typically cuts heating and cooling costs by 5–15% in the Tulsa climate. On a $180/month energy bill that is roughly $110–$320 per year. The payback calculator above applies that range to your specific bill and roof age.
Can Class 4 impact-resistant shingles lower my homeowners insurance?
Many Oklahoma carriers offer 15–25% premium discounts for Class 4 (UL 2218) impact-resistant shingles because they dramatically reduce hail claims. On a typical $2,000 annual premium, that is $300–$500 saved every year, which can offset the upgrade cost within a few years. Proof Construction installs Class 4 systems and can help you document them for your carrier.
Is it better to replace my roof now or wait?
If your roof is past its expected life, waiting usually costs more: emergency repairs, interior water damage, and a rushed replacement after a storm all carry premiums. If your roof still has 10+ years of life, waiting can make financial sense. The calculator above compares both paths over a 10-year window so you can decide with real numbers instead of guesswork.
Proudly Serving the Greater Tulsa Metro
Tulsa
Broken Arrow
Bixby
Jenks
Owasso
Sand Springs
Claremore
Sapulpa
Glenpool