*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; } body { font-family: 'Inter', sans-serif; background: var(--white); color: var(--ink); font-size: 16px; line-height: 1.6; -webkit-font-smoothing: antialiased; } h1,h2,h3,h4 { font-family: 'DM Sans', sans-serif; } /* NAV */ nav { position: sticky; top: 0; z-index: 100; background: rgba(15,31,46,0.97); backdrop-filter: blur(8px); padding: 0 5%; display: flex; align-items: center; justify-content: space-between; height: 58px; } .nav-logo { font-family: 'DM Sans', sans-serif; font-size: 20px; font-weight: 700; color: var(--white); letter-spacing: -0.3px; } .nav-logo span { color: var(--amber); } .nav-links { display: flex; align-items: center; gap: 28px; } .nav-links a { color: rgba(255,255,255,0.7); font-size: 14px; text-decoration: none; transition: color 0.2s; } .nav-links a:hover { color: var(--white); } .nav-cta { background: var(--amber); color: var(--ink); font-family: 'DM Sans', sans-serif; font-size: 14px; font-weight: 700; padding: 8px 20px; border-radius: 8px; text-decoration: none; transition: opacity 0.2s; } .nav-cta:hover { opacity: 0.9; } .nav-mobile-hide { display: flex; } /* HERO */ .hero { background: var(--ink); color: var(--white); padding: 80px 5% 72px; position: relative; overflow: hidden; } .hero::before { content: ''; position: absolute; right: -60px; top: -60px; width: 420px; height: 420px; border-radius: 50%; background: rgba(232,160,32,0.06); pointer-events: none; } .hero-eyebrow { display: inline-flex; align-items: center; gap: 8px; background: rgba(232,160,32,0.15); border: 1px solid rgba(232,160,32,0.3); color: var(--amber); font-size: 12px; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; padding: 5px 14px; border-radius: 20px; margin-bottom: 24px; } .hero h1 { font-size: clamp(36px, 5.5vw, 62px); font-weight: 700; line-height: 1.08; letter-spacing: -1.5px; max-width: 780px; margin-bottom: 22px; } .hero h1 em { font-style: normal; color: var(--amber); } .hero-sub { font-size: clamp(16px, 2vw, 19px); color: rgba(255,255,255,0.65); max-width: 560px; margin-bottom: 40px; line-height: 1.6; } .hero-actions { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; } .btn-hero { background: var(--amber); color: var(--ink); font-family: 'DM Sans', sans-serif; font-size: 16px; font-weight: 700; padding: 14px 32px; border-radius: var(--radius); border: none; cursor: pointer; text-decoration: none; display: inline-block; transition: transform 0.15s, opacity 0.15s; } .btn-hero:hover { opacity: 0.92; transform: translateY(-1px); } .btn-ghost { color: rgba(255,255,255,0.7); font-size: 15px; text-decoration: none; display: flex; align-items: center; gap: 6px; } .btn-ghost:hover { color: var(--white); } .hero-stats { display: flex; gap: 40px; margin-top: 56px; padding-top: 40px; border-top: 1px solid rgba(255,255,255,0.1); flex-wrap: wrap; } .hero-stat-val { font-family: 'DM Sans', sans-serif; font-size: 34px; font-weight: 700; color: var(--white); } .hero-stat-val .counter { display: inline-block; } .hero-stat-lbl { font-size: 13px; color: rgba(255,255,255,0.5); margin-top: 2px; } /* TRUST BAR */ .trust-bar { background: var(--offwhite); border-bottom: 1px solid var(--border); padding: 18px 5%; display: flex; align-items: center; justify-content: center; gap: 40px; flex-wrap: wrap; } .trust-item { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--muted); } .trust-icon { font-size: 16px; } /* HOW IT WORKS */ .how { padding: 80px 5%; background: var(--white); } .section-label { font-size: 12px; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; color: var(--amber); margin-bottom: 12px; } .section-title { font-family: 'DM Sans', sans-serif; font-size: clamp(26px, 3.5vw, 38px); font-weight: 700; letter-spacing: -0.5px; color: var(--ink); margin-bottom: 12px; } .section-sub { font-size: 17px; color: var(--muted); max-width: 520px; line-height: 1.6; margin-bottom: 48px; } .steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 24px; } .step { background: var(--offwhite); border-radius: var(--radius-lg); padding: 28px 24px; position: relative; } .step-num { font-family: 'DM Sans', sans-serif; font-size: 11px; font-weight: 700; letter-spacing: 0.1em; color: var(--amber); margin-bottom: 14px; } .step-icon { font-size: 32px; margin-bottom: 14px; } .step h3 { font-family: 'DM Sans', sans-serif; font-size: 17px; font-weight: 700; color: var(--ink); margin-bottom: 8px; } .step p { font-size: 14px; color: var(--muted); line-height: 1.6; } .step-connector { display: none; } /* LIVE TOOL */ .tool-section { background: var(--offwhite); padding: 80px 5%; } .tool-wrap { max-width: 860px; margin: 0 auto; } .tool-card { background: var(--white); border-radius: var(--radius-lg); border: 1px solid var(--border); overflow: hidden; box-shadow: 0 4px 24px rgba(15,31,46,0.08); } .tool-header { background: var(--ink); padding: 20px 28px; display: flex; align-items: center; justify-content: space-between; } .tool-header-title { font-family: 'DM Sans', sans-serif; font-size: 15px; font-weight: 700; color: var(--white); } .tool-badge { background: rgba(232,160,32,0.2); color: var(--amber); font-size: 11px; font-weight: 500; padding: 3px 10px; border-radius: 20px; } .tool-body { padding: 28px; } .tool-tabs { display: flex; gap: 4px; margin-bottom: 24px; background: var(--offwhite); border-radius: var(--radius); padding: 4px; } .tool-tab { flex: 1; padding: 8px; font-family: 'DM Sans', sans-serif; font-size: 13px; font-weight: 500; background: none; border: none; border-radius: 7px; cursor: pointer; color: var(--muted); transition: all 0.2s; } .tool-tab.active { background: var(--white); color: var(--ink); box-shadow: 0 1px 4px rgba(0,0,0,0.08); } .project-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 20px; } .ptype-btn { border: 1.5px solid var(--border); border-radius: var(--radius); padding: 12px 8px; text-align: center; cursor: pointer; background: var(--white); font-size: 12px; color: var(--muted); display: flex; flex-direction: column; align-items: center; gap: 6px; transition: all 0.15s; } .ptype-btn:hover { border-color: var(--amber); color: var(--ink); } .ptype-btn.sel { border: 2px solid var(--amber); color: var(--ink); background: var(--amber-light); font-weight: 500; } .ptype-icon { font-size: 22px; } .field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; } .tf label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 5px; font-weight: 500; } .tf input, .tf select, .tf textarea { width: 100%; padding: 9px 12px; border: 1.5px solid var(--border); border-radius: var(--radius); font-size: 14px; font-family: 'Inter', sans-serif; color: var(--ink); background: var(--white); outline: none; transition: border-color 0.2s; } .tf input:focus, .tf select:focus, .tf textarea:focus { border-color: var(--amber); } .tf textarea { resize: vertical; min-height: 80px; } .voice-row { display: flex; gap: 8px; margin-bottom: 16px; } .voice-btn { display: flex; align-items: center; gap: 6px; padding: 8px 14px; border: 1.5px solid var(--border); border-radius: var(--radius); background: var(--white); font-size: 13px; color: var(--muted); cursor: pointer; transition: all 0.2s; } .voice-btn:hover { border-color: var(--ink); color: var(--ink); } .voice-btn.rec { border-color: #C0392B; color: #C0392B; } .tag-row { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 16px; } .qtag { display: inline-flex; align-items: center; gap: 4px; background: var(--offwhite); border: 1px solid var(--border); border-radius: 20px; padding: 3px 10px; font-size: 12px; color: var(--muted); cursor: pointer; } .qtag:hover { border-color: var(--amber); color: var(--ink); } .gen-btn { width: 100%; background: var(--ink); color: var(--white); font-family: 'DM Sans', sans-serif; font-size: 15px; font-weight: 700; padding: 14px; border: none; border-radius: var(--radius); cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 8px; transition: opacity 0.2s; margin-top: 4px; } .gen-btn:hover { opacity: 0.88; } .progress-bar { height: 3px; background: var(--border); border-radius: 2px; margin-bottom: 20px; overflow: hidden; display: none; } .progress-fill { height: 100%; background: var(--amber); width: 0%; transition: width 0.4s ease; border-radius: 2px; } .status-msg { font-size: 13px; color: var(--muted); margin-bottom: 16px; display: none; text-align: center; } #estimate-out { display: none; } .estimate-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 16px; flex-wrap: wrap; gap: 10px; } .estimate-title { font-family: 'DM Sans', sans-serif; font-size: 16px; font-weight: 700; color: var(--ink); } .estimate-meta { font-size: 12px; color: var(--muted); margin-top: 3px; } .export-row { display: flex; gap: 8px; } .exp-btn { display: flex; align-items: center; gap: 5px; padding: 6px 12px; border: 1px solid var(--border); border-radius: 7px; background: var(--white); font-size: 12px; color: var(--muted); cursor: pointer; } .exp-btn:hover { border-color: var(--ink); color: var(--ink); } .totals { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 20px; } .total-card { background: var(--offwhite); border-radius: var(--radius); padding: 12px 14px; text-align: center; } .total-card.highlight { background: var(--blue-light); } .total-card.savings { background: var(--green-light); } .total-val { font-family: 'DM Sans', sans-serif; font-size: 18px; font-weight: 700; color: var(--ink); } .total-card.highlight .total-val { color: var(--blue); } .total-card.savings .total-val { color: var(--green); } .total-lbl { font-size: 11px; color: var(--muted); margin-top: 2px; } .est-table { width: 100%; border-collapse: collapse; font-size: 13px; } .est-table th { text-align: left; padding: 7px 10px; font-size: 11px; font-weight: 500; color: var(--muted); border-bottom: 1px solid var(--border); text-transform: uppercase; letter-spacing: 0.05em; } .est-table td { padding: 9px 10px; border-bottom: 1px solid var(--border); vertical-align: top; } .est-table tr:last-child td { border-bottom: none; } .cat-row td { background: var(--offwhite); font-size: 11px; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: 0.07em; padding: 5px 10px; } .price-retail { color: var(--muted); text-decoration: line-through; font-size: 12px; } .price-ws { color: var(--green); font-weight: 500; } .price-local { color: var(--blue); font-weight: 600; } .save-pill { background: var(--green-light); color: var(--green); font-size: 10px; font-weight: 600; padding: 2px 7px; border-radius: 20px; white-space: nowrap; } .ios-tip { font-size: 12px; color: var(--muted); background: var(--offwhite); border-radius: 7px; padding: 8px 12px; margin-top: 12px; display: none; } /* PRICE COLUMNS */ .why { padding: 80px 5%; background: var(--ink); color: var(--white); } .why .section-label { color: var(--amber); } .why .section-title { color: var(--white); } .why .section-sub { color: rgba(255,255,255,0.55); } .price-cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; } .price-col { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: var(--radius-lg); padding: 28px 24px; } .price-col.featured { background: rgba(232,160,32,0.1); border-color: rgba(232,160,32,0.35); } .price-col-label { font-size: 11px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(255,255,255,0.5); margin-bottom: 10px; } .price-col.featured .price-col-label { color: var(--amber); } .price-col h3 { font-family: 'DM Sans', sans-serif; font-size: 18px; font-weight: 700; color: var(--white); margin-bottom: 8px; } .price-col p { font-size: 14px; color: rgba(255,255,255,0.55); line-height: 1.6; } .price-col-tag { display: inline-block; margin-top: 14px; font-size: 12px; font-weight: 600; color: var(--amber); } /* SOCIAL PROOF */ .proof { padding: 80px 5%; background: var(--offwhite); } .testimonials { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 20px; margin-top: 40px; } .tcard { background: var(--white); border-radius: var(--radius-lg); padding: 24px; border: 1px solid var(--border); } .tcard-stars { color: var(--amber); font-size: 14px; margin-bottom: 12px; letter-spacing: 2px; } .tcard p { font-size: 15px; color: var(--ink); line-height: 1.65; margin-bottom: 16px; } .tcard-author { display: flex; align-items: center; gap: 10px; } .tcard-avatar { width: 38px; height: 38px; border-radius: 50%; background: var(--amber-light); display: flex; align-items: center; justify-content: center; font-family: 'DM Sans', sans-serif; font-size: 14px; font-weight: 700; color: var(--amber); flex-shrink: 0; } .tcard-name { font-family: 'DM Sans', sans-serif; font-size: 14px; font-weight: 700; color: var(--ink); } .tcard-loc { font-size: 12px; color: var(--muted); } /* EMAIL CAPTURE */ .capture { padding: 80px 5%; background: var(--amber); } .capture-inner { max-width: 600px; margin: 0 auto; text-align: center; } .capture h2 { font-family: 'DM Sans', sans-serif; font-size: clamp(28px, 4vw, 40px); font-weight: 700; color: var(--ink); letter-spacing: -0.5px; margin-bottom: 14px; } .capture p { font-size: 17px; color: rgba(15,31,46,0.7); margin-bottom: 32px; } .email-form { display: flex; gap: 10px; max-width: 460px; margin: 0 auto; flex-wrap: wrap; justify-content: center; } .email-form input { flex: 1; min-width: 220px; padding: 13px 16px; border: none; border-radius: var(--radius); font-size: 15px; font-family: 'Inter', sans-serif; outline: none; } .email-form button { background: var(--ink); color: var(--white); font-family: 'DM Sans', sans-serif; font-size: 15px; font-weight: 700; padding: 13px 28px; border: none; border-radius: var(--radius); cursor: pointer; transition: opacity 0.2s; white-space: nowrap; } .email-form button:hover { opacity: 0.85; } .capture-fine { font-size: 12px; color: rgba(15,31,46,0.5); margin-top: 14px; } .success-msg { display: none; background: rgba(15,31,46,0.1); border-radius: var(--radius); padding: 16px 20px; font-family: 'DM Sans', sans-serif; font-size: 16px; font-weight: 700; color: var(--ink); } /* FOOTER */ footer { background: var(--ink); color: rgba(255,255,255,0.45); padding: 40px 5%; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 16px; font-size: 13px; } .footer-logo { font-family: 'DM Sans', sans-serif; font-size: 17px; font-weight: 700; color: var(--white); } .footer-logo span { color: var(--amber); } .footer-links { display: flex; gap: 20px; flex-wrap: wrap; } .footer-links a { color: rgba(255,255,255,0.4); text-decoration: none; font-size: 13px; } .footer-links a:hover { color: rgba(255,255,255,0.7); } /* PRINT */ @media print { nav, .trust-bar, .how, .tool-tabs, .ptype-btn, .voice-btn, .tag-row, .gen-btn, .why, .proof, .capture, footer, .export-row, .tool-header, .progress-bar, .status-msg, .ios-tip, .hero-actions, .hero-stats, .btn-hero, .btn-ghost, .step-connector { display: none !important; } .hero { padding: 20px 0; background: white; color: black; } .hero h1 { font-size: 24px; color: black; } #estimate-out { display: block !important; } .tool-section { background: white; padding: 0; } .tool-card { box-shadow: none; border: none; } } /* RESPONSIVE */ @media (max-width: 640px) { .nav-mobile-hide { display: none; } .hero { padding: 56px 5% 48px; } .hero-stats { gap: 24px; } .price-cols { grid-template-columns: 1fr; } .totals { grid-template-columns: 1fr 1fr; } .field-row { grid-template-columns: 1fr; } .project-grid { grid-template-columns: repeat(3, 1fr); } }
StackBid
Install StackBid
Add to Home Screen for quick access
● AI-Powered · 2026 Wholesale Prices · No Signup

Know your real materials cost before you build

Type what you're building. Get a full materials estimate with local wholesale prices — in under 3 minutes. Free.

Try it now — it's free See how it works ↓
$0
avg. saved vs retail per project
0 min
from description to full estimate
0%
below Home Depot shelf price
No account required
Works on iPhone & iPad
Real 2026 wholesale prices
Local supplier by ZIP code
Save to PDF in one tap
How it works

Three steps to your estimate

No contractor. No waiting. No hourly fees for a number you could get yourself.

STEP 1
🎙️

Describe your project

Type, speak, or upload a photo or PDF of your plans. "20×24 deck, composite boards, cable railing" is enough to start.

STEP 2
📍

Enter your ZIP code

We find the nearest wholesale supplier — 84 Lumber, ProBuild, Menards — and pull their current 2026 pricing for your area.

STEP 3
📋

Get your estimate

A full bill of materials with three price columns: retail, wholesale, and your nearest local supplier. Save to PDF in one tap.

Get your free estimate

No signup. No credit card. Works on any device.

StackBid StackBid Estimator
Free · 2026 Prices
🏠
New home
🪵
Deck / patio
🪧
Fence
🏗️
Roofing
🏚️
Siding
Foundation
or type your project details below
Analyzing your project...
$0
potential savings
vs Home Depot retail
Get your full estimate — free
Enter your details to unlock all items with complete pricing. We'll also email you a PDF copy.
No spam. Unsubscribe anytime. We never sell your data.
Already have an account? Skip →
Prices: current 2026 wholesale market
📱 On iPhone/iPad: tap "Save PDF" → tap the Share icon → "Save to Files" or "Print"
Material Qty HD retail Wholesale Local supplier
Why three prices?

Stop paying retail for contractor materials

Most homeowners overpay because they don't know wholesale exists — or where to find it.

Column 1

Home Depot / Lowe's retail

Walk-in shelf price. Convenient, but the most expensive way to buy materials for a serious project.

Baseline reference
Column 3

Local supplier by ZIP

Your nearest lumber yard or supply house — 84 Lumber, ProBuild, Builders FirstSource. Often the best deal in town.

⬇ avg. 28% savings
What homeowners say

Real people. Real projects. Real savings.

★★★★★

"I was about to order everything from Home Depot for my deck. StackBid showed me the same lumber at 84 Lumber for $4,200 less. I drove 4 miles and saved 4 grand."

DM
Derek M.
Katy, TX · 480 sq ft deck
★★★★★

"My contractor gave me a $38k materials quote. I ran it through StackBid and the same list came to $26k wholesale. That conversation got very interesting very fast."

SL
Sandra L.
Gilbert, AZ · Full home build
★★★★★

"Replaced the siding on my 1,400 sq ft ranch. Took 2 minutes to get the estimate on my iPhone, saved the PDF, and showed up at the supplier with the list. Easy."

RK
Ron K.
Lakeland, FL · Vinyl siding

Save your estimate. Get supplier deals.

Enter your email and we'll send your estimate as a PDF — plus notify you when local suppliers in your ZIP run bulk discounts.

✓ Check your inbox — your estimate is on its way.

No spam. Unsubscribe any time. We never sell your data.