diff --git a/404.html b/404.html new file mode 100644 index 0000000..fa73fd1 --- /dev/null +++ b/404.html @@ -0,0 +1,90 @@ + + + + + + Page Not Found | Floor It Hardwood Floors + + + + +
+
404
+

Page Not Found

+

The page you're looking for doesn't exist. Let us help you find what you need.

+
+ Go to Homepage + Contact Us +
+ +
+ + diff --git a/500.html b/500.html new file mode 100644 index 0000000..c1653ac --- /dev/null +++ b/500.html @@ -0,0 +1,90 @@ + + + + + + Server Error | Floor It Hardwood Floors + + + + +
+
500
+

Something Went Wrong

+

We're experiencing a temporary issue. Please try again in a moment or contact us directly.

+
+ Go to Homepage + Contact Us +
+ +
+ + diff --git a/assets/css/components.css b/assets/css/components.css index edfe8c2..732ee65 100644 --- a/assets/css/components.css +++ b/assets/css/components.css @@ -1236,11 +1236,15 @@ .contact-layout { grid-template-columns: 1fr; } } -@media (max-width: 768px) { +/* Header: switch to mobile menu earlier — desktop nav with logo + 6 links + + phone + CTA needs ~1024px to fit without overflowing. */ +@media (max-width: 1023px) { .header-nav { display: none; } .header-phone { display: none; } .header-menu-btn { display: flex; } +} +@media (max-width: 768px) { .hero-content { padding-block: var(--space-16); } .process-steps { grid-template-columns: 1fr; } @@ -1264,6 +1268,16 @@ .header-logo-sub { display: none; } } +/* Ultra-narrow phones (iPhone SE portrait, 320px) — tighten header */ +@media (max-width: 360px) { + .header-cta .btn--sm { + padding-inline: 0.75rem; + font-size: 0.75rem; + } + .header-logo img { height: 36px !important; } + .container { padding-inline: 0.875rem; } +} + /* --- Premium Elevation Pass ----------------------------- */ /* Hero: refined layout, larger stat section */ @@ -1651,3 +1665,132 @@ gap: var(--space-4); align-items: flex-start; } + +/* ============================================================ + Mobile responsive overrides — inline grids must collapse + to single column on narrow viewports. Inline styles win over + CSS unless we use !important inside media queries. + ============================================================ */ + +/* Prevent off-screen positioned elements (mobile nav panel, etc.) + from creating horizontal scroll on the document. */ +html, body { + overflow-x: clip; + max-width: 100%; +} + +@media (max-width: 900px) { + /* Any inline 2-col grid pattern → single column */ + [style*="grid-template-columns:1fr 1fr"], + [style*="grid-template-columns: 1fr 1fr"], + [style*="grid-template-columns:repeat(2,1fr)"], + [style*="grid-template-columns: repeat(2,1fr)"], + [style*="grid-template-columns:repeat(2, 1fr)"], + [style*="grid-template-columns: repeat(2, 1fr)"], + [style*="grid-template-columns:5fr 7fr"], + [style*="grid-template-columns: 5fr 7fr"] { + grid-template-columns: 1fr !important; + gap: 2rem !important; + } + + /* Services 2x2 grid → single column */ + .services-grid-2x2 { + grid-template-columns: 1fr !important; + } + + /* Auto grids should stack tighter */ + .grid--auto-3, + .grid--auto-4 { + grid-template-columns: 1fr !important; + gap: 1.5rem !important; + } + + /* Order overrides — when 2-col uses order:1/2 to flip image/content, + reset on mobile so content always reads top-to-bottom */ + [style*="order:1"], + [style*="order: 1"] { + order: 0 !important; + } + [style*="order:2"], + [style*="order: 2"] { + order: 0 !important; + } + + /* Form rows stack */ + .form-grid--2 { + grid-template-columns: 1fr !important; + } + + /* Hero sub-stats stack with proper spacing */ + .hero-trust { + flex-direction: column !important; + gap: 1.5rem !important; + align-items: flex-start !important; + } + + /* Page hero padding tighten */ + .page-hero { + padding-block: 4rem 3rem; + } + + /* Section padding tighten */ + .section { + padding-block: 3.5rem; + } + + /* CTA strip vertical layout */ + .cta-group { + flex-direction: column !important; + align-items: stretch !important; + } + .cta-group .btn { + width: 100%; + } + + /* Form/contact layout — prevent intrinsic input width from blowing out + the grid track. Without min-width:0, defaults push + the parent column wider than the viewport, causing horizontal scroll. */ + .contact-layout { min-width: 0; } + .contact-form-wrap, + .contact-info-list { min-width: 0; max-width: 100%; } + .form-grid, + .form-grid--2 { min-width: 0; } + .form-field { min-width: 0; } + .form-field input, + .form-field textarea, + .form-field select { + min-width: 0; + max-width: 100%; + box-sizing: border-box; + } +} + +@media (max-width: 600px) { + /* Tighten inline grid gaps further on phones */ + [style*="grid-template-columns:1fr 1fr"], + [style*="grid-template-columns:repeat(2,1fr)"], + [style*="grid-template-columns: 1fr 1fr"], + [style*="grid-template-columns: repeat(2,1fr)"] { + gap: 1.5rem !important; + } + + /* Auto-3 grid items single column */ + .grid--auto-3 { gap: 1rem !important; } + + /* Container side padding tighter */ + .container { + padding-inline: 1rem; + } + + /* Reduce all heading sizes a touch */ + h1 { font-size: clamp(1.875rem, 8vw, 2.5rem) !important; } + h2 { font-size: clamp(1.5rem, 6vw, 2rem) !important; } + + /* Page hero text tighter */ + .page-hero h1 { + font-size: clamp(1.875rem, 7vw, 2.25rem) !important; + } + .lead { + font-size: 1rem; + } +} diff --git a/assets/images/residential.webp b/assets/images/residential.webp new file mode 100644 index 0000000..c01ebcf Binary files /dev/null and b/assets/images/residential.webp differ diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..0ace14e --- /dev/null +++ b/blog/index.html @@ -0,0 +1,110 @@ + + + + + + + Hardwood Floor Tips & Guides | Floor It Blog + + + + + + + + + + + + + +
+ +
+
+ + From the Floor It Team +

Hardwood Floor Tips & Guides

+

Practical advice and expert tips for Buffalo, NY homeowners. Learn how to maintain, protect, and care for your hardwood floors with guidance from the Western New York refinishing specialists.

+
+
+ + +
+
+
+ Latest Articles +

Hardwood Floor Care Resources

+
+ +
+ +
+
+

How to Tell If Your Floors Need Refinishing

+

Learn the warning signs that indicate your hardwood floors are ready for a professional refinish. From visible scratches to dull finishes, we explain what to look for and when to act.

+
+
+ Read More +
+
+ +
+
+

Hardwood vs. Engineered: Which Is Right for Your Home?

+

Considering a new floor installation or replacement? Discover the pros and cons of solid hardwood and engineered hardwood to make the best choice for your Buffalo home.

+
+
+ Read More +
+
+ +
+
+

What to Expect During a Floor Refinishing Project

+

Wondering what happens during a professional floor refinishing? Get a detailed walkthrough of the timeline, process, and what to expect from start to finish.

+
+
+ Read More +
+
+ +
+
+
+ +
+
+

Ready to Transform Your Floors?

+

Request a free estimate and let Floor It help restore your hardwood floors to their original beauty.

+ +
+
+ +
+ + + + + + + diff --git a/nginx.conf b/nginx.conf index 607a78e..1d393a8 100644 --- a/nginx.conf +++ b/nginx.conf @@ -9,7 +9,7 @@ server { deny all; return 404; } - location ~* \.(env|env\.example|conf|yml|yaml|py|pyc|md|txt|sh|sql|log|bak|old|swp|dockerfile)$ { + location ~* \.(env|env\.example|conf|yml|yaml|py|pyc|md|sh|sql|log|bak|old|swp|dockerfile)$ { deny all; return 404; } @@ -18,7 +18,15 @@ server { return 404; } - # API proxy — strip /api/ prefix, forward to Node.js service + location ~* /_template\.html$ { + deny all; + return 404; + } + + location = /robots.txt { access_log off; } + location = /sitemap.xml { access_log off; } + + # API proxy — strip /api/ prefix, forward to Python API service location /api/ { proxy_pass http://api:3001/; proxy_http_version 1.1; @@ -51,5 +59,5 @@ server { gzip_types text/html text/css application/javascript image/svg+xml; gzip_min_length 1024; - error_page 404 /index.html; + error_page 404 /404.html; } diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..9f96b21 --- /dev/null +++ b/robots.txt @@ -0,0 +1,5 @@ +User-agent: * +Allow: / +Disallow: /api/ + +Sitemap: https://floorithardwoodfloors.com/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..7600db6 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,99 @@ + + + + https://floorithardwoodfloors.com/ + 2026-05-27 + weekly + 1.0 + + + https://floorithardwoodfloors.com/about/ + 2026-05-27 + monthly + 0.8 + + + https://floorithardwoodfloors.com/contact/ + 2026-05-27 + monthly + 0.9 + + + https://floorithardwoodfloors.com/reviews/ + 2026-05-27 + weekly + 0.8 + + + https://floorithardwoodfloors.com/services/ + 2026-05-27 + monthly + 0.9 + + + https://floorithardwoodfloors.com/services/floor-refinishing.html + 2026-05-27 + monthly + 0.85 + + + https://floorithardwoodfloors.com/services/floor-installation.html + 2026-05-27 + monthly + 0.85 + + + https://floorithardwoodfloors.com/services/floor-restoration.html + 2026-05-27 + monthly + 0.85 + + + https://floorithardwoodfloors.com/services/floor-sanding.html + 2026-05-27 + monthly + 0.85 + + + https://floorithardwoodfloors.com/locations/ + 2026-05-27 + monthly + 0.8 + + + https://floorithardwoodfloors.com/locations/buffalo.html + 2026-05-27 + monthly + 0.85 + + + https://floorithardwoodfloors.com/locations/amherst.html + 2026-05-27 + monthly + 0.8 + + + https://floorithardwoodfloors.com/locations/williamsville.html + 2026-05-27 + monthly + 0.8 + + + https://floorithardwoodfloors.com/locations/east-amherst.html + 2026-05-27 + monthly + 0.8 + + + https://floorithardwoodfloors.com/locations/clarence.html + 2026-05-27 + monthly + 0.8 + + + https://floorithardwoodfloors.com/locations/lancaster.html + 2026-05-27 + monthly + 0.8 + +