Files
floorithardwoodfloors.com/assets/css/components.css
T
Concept Agent b94b66205f Fix contact form styles + narrow screen nav clipping
- Alias .form-group to .form-field in main.css so contact form inputs get full styling
- Hide header Get Estimate btn on <=480px (mobile drawer has CTA, prevents logo+btn+hamburger overflow)
- Tighten header-inner gap to space-4 on <=480px
- Drop redundant btn-sm padding override from 360px rule (btn now hidden at that width)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 15:39:47 +02:00

2094 lines
43 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ============================================================
FLOOR IT HARDWOOD FLOORS : Component Styles
components.css: header, footer, hero, cards, faq, gallery
============================================================ */
/* --- Header / Navigation ---------------------------------- */
#site-header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
}
.site-header {
background: transparent;
transition: background var(--transition), box-shadow var(--transition);
}
.site-header.scrolled {
background: var(--ink);
box-shadow: 0 2px 20px rgba(0,0,0,0.4);
}
.header-inner {
display: flex;
align-items: center;
justify-content: space-between;
height: var(--header-h);
gap: var(--space-8);
}
.header-logo {
display: flex;
align-items: center;
gap: var(--space-3);
flex-shrink: 0;
}
/* Logo stays white at all times */
.header-logo img {
filter: brightness(0) invert(1);
}
.header-logo-wordmark {
font-size: var(--text-xl);
font-weight: 800;
color: var(--white);
letter-spacing: -0.03em;
line-height: 1;
}
.header-logo-wordmark span {
color: var(--amber);
}
.header-logo-sub {
font-size: var(--text-xs);
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--ash);
line-height: 1;
}
.header-nav {
display: flex;
align-items: center;
gap: var(--space-1);
}
.header-nav a {
padding: var(--space-2) var(--space-3);
font-size: var(--text-sm);
font-weight: 600;
color: rgba(255,255,255,0.8);
letter-spacing: 0.02em;
border-radius: var(--radius);
transition: color var(--transition), background var(--transition);
white-space: nowrap;
}
.header-nav a:hover,
.header-nav a.active {
color: var(--white);
background: rgba(255,255,255,0.08);
}
.header-nav a.active { color: var(--amber); }
.header-cta {
display: flex;
align-items: center;
gap: var(--space-4);
flex-shrink: 0;
}
.header-phone {
font-size: var(--text-sm);
font-weight: 700;
color: var(--white);
transition: color var(--transition);
}
.header-phone:hover { color: var(--amber); }
.header-menu-btn {
display: none;
flex-direction: column;
justify-content: center;
align-items: center;
width: 40px;
height: 40px;
gap: 5px;
cursor: pointer;
border-radius: var(--radius);
transition: background var(--transition);
}
.header-menu-btn:hover { background: rgba(255,255,255,0.1); }
.header-menu-btn span {
display: block;
width: 22px;
height: 2px;
background: var(--white);
border-radius: 2px;
transition: transform 0.3s ease, opacity 0.3s ease, width 0.3s ease;
transform-origin: center;
}
.header-menu-btn.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.header-menu-btn.open span:nth-child(2) { opacity: 0; width: 0; }
.header-menu-btn.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
/* Mobile drawer */
.mobile-nav {
position: fixed;
inset: 0;
z-index: 999;
pointer-events: none;
}
.mobile-nav-overlay {
position: absolute;
inset: 0;
background: rgba(0,0,0,0.7);
opacity: 0;
transition: opacity 0.35s ease;
}
.mobile-nav-panel {
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: min(380px, 92vw);
background: var(--charcoal);
transform: translateX(100%);
transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);
display: flex;
flex-direction: column;
padding: var(--space-8) var(--space-6);
gap: var(--space-6);
overflow-y: auto;
}
.mobile-nav.open {
pointer-events: all;
}
.mobile-nav.open .mobile-nav-overlay { opacity: 1; }
.mobile-nav.open .mobile-nav-panel { transform: translateX(0); }
.mobile-nav-close {
align-self: flex-end;
color: var(--white);
font-size: var(--text-xl);
line-height: 1;
padding: var(--space-2);
cursor: pointer;
opacity: 0.7;
transition: opacity var(--transition);
}
.mobile-nav-close:hover { opacity: 1; }
.mobile-nav-links {
display: flex;
flex-direction: column;
gap: var(--space-1);
}
.mobile-nav-links a {
display: block;
padding: var(--space-3) var(--space-4);
font-size: var(--text-md);
font-weight: 600;
color: rgba(255,255,255,0.85);
border-radius: var(--radius);
border-left: 3px solid transparent;
transition: color var(--transition), border-color var(--transition), background var(--transition);
}
.mobile-nav-links a:hover,
.mobile-nav-links a.active {
color: var(--amber);
border-left-color: var(--amber);
background: rgba(200,139,42,0.08);
}
.mobile-nav-cta {
margin-top: auto;
padding-top: var(--space-6);
border-top: 1px solid var(--border-dark);
display: flex;
flex-direction: column;
gap: var(--space-3);
}
.mobile-nav-phone {
font-size: var(--text-lg);
font-weight: 700;
color: var(--amber);
text-align: center;
}
/* --- Footer ----------------------------------------------- */
.site-footer {
background: var(--ink);
color: var(--text-on-dark);
}
.footer-top {
padding-block: var(--space-20);
border-bottom: 1px solid var(--border-dark);
}
.footer-grid {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
gap: var(--space-12);
}
.footer-brand .footer-logo-text {
font-size: var(--text-2xl);
font-weight: 800;
letter-spacing: -0.03em;
margin-bottom: var(--space-2);
}
.footer-brand .footer-logo-text span { color: var(--amber); }
.footer-brand p {
font-size: var(--text-sm);
color: var(--ash);
line-height: 1.7;
margin-top: var(--space-4);
max-width: 32ch;
}
.footer-col h5 {
font-size: var(--text-xs);
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--amber);
margin-bottom: var(--space-5);
}
.footer-col ul {
display: flex;
flex-direction: column;
gap: var(--space-3);
}
.footer-col ul li a {
font-size: var(--text-sm);
color: var(--ash);
transition: color var(--transition);
}
.footer-col ul li a:hover { color: var(--white); }
.footer-contact-list {
display: flex;
flex-direction: column;
gap: var(--space-4);
}
.footer-contact-item {
display: flex;
gap: var(--space-3);
align-items: flex-start;
}
.footer-contact-icon {
width: 32px;
height: 32px;
background: var(--bark);
border-radius: var(--radius);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-top: 2px;
}
.footer-contact-icon svg {
width: 14px;
height: 14px;
fill: var(--amber);
}
.footer-contact-item a {
font-size: var(--text-sm);
color: var(--ash);
transition: color var(--transition);
display: block;
}
.footer-contact-item a:hover { color: var(--white); }
.footer-contact-item span {
font-size: var(--text-xs);
color: var(--smoke);
letter-spacing: 0.04em;
}
.footer-bottom {
padding-block: var(--space-6);
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-4);
flex-wrap: wrap;
}
.footer-bottom p {
font-size: var(--text-xs);
color: var(--smoke);
max-width: none;
}
.footer-bottom a {
color: var(--smoke);
transition: color var(--transition);
}
.footer-bottom a:hover { color: var(--white); }
.footer-legal {
display: flex;
gap: var(--space-5);
}
/* --- Hero ------------------------------------------------- */
.hero {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
background: var(--ink);
overflow: hidden;
padding-top: var(--header-h);
}
.hero-video-wrap {
position: absolute;
inset: 0;
z-index: 0;
}
.hero-video-wrap img,
.hero-video-wrap video {
width: 100%;
height: 100%;
object-fit: cover;
opacity: 0.45;
}
.hero-video-wrap::after {
content: '';
position: absolute;
inset: 0;
background: rgba(12,8,5,0.55);
}
/* Fallback texture when no video */
.hero--no-video {
background: var(--charcoal);
}
.hero-content {
position: relative;
z-index: 1;
padding-block: var(--space-24);
max-width: 780px;
}
.hero-eyebrow {
display: flex;
align-items: center;
gap: var(--space-3);
margin-bottom: var(--space-6);
opacity: 0;
animation: heroFadeUp 0.8s ease forwards 0.2s;
}
.hero-eyebrow-line {
width: 40px;
height: 2px;
background: var(--amber);
}
.hero-eyebrow span {
font-size: var(--text-xs);
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--amber);
}
.hero h1 {
color: var(--white);
line-height: 1.08;
opacity: 0;
animation: heroFadeUp 0.8s ease forwards 0.35s;
}
.hero-sub {
font-size: clamp(var(--text-base), 2vw, var(--text-lg));
color: rgba(255,255,255,0.75);
line-height: 1.65;
margin-top: var(--space-6);
max-width: 52ch;
opacity: 0;
animation: heroFadeUp 0.8s ease forwards 0.5s;
}
.hero-actions {
display: flex;
flex-wrap: wrap;
gap: var(--space-4);
margin-top: var(--space-8);
opacity: 0;
animation: heroFadeUp 0.8s ease forwards 0.65s;
}
.hero-trust {
display: flex;
flex-wrap: wrap;
gap: var(--space-6);
margin-top: var(--space-10);
padding-top: var(--space-8);
border-top: 1px solid rgba(255,255,255,0.12);
opacity: 0;
animation: heroFadeUp 0.8s ease forwards 0.8s;
}
.hero-trust-stat strong {
display: block;
font-size: var(--text-2xl);
font-weight: 800;
color: var(--amber);
line-height: 1;
letter-spacing: -0.02em;
}
.hero-trust-stat span {
display: block;
font-size: var(--text-xs);
color: rgba(255,255,255,0.55);
letter-spacing: 0.06em;
text-transform: uppercase;
margin-top: var(--space-1);
font-weight: 600;
}
@keyframes heroFadeUp {
from { opacity: 0; transform: translateY(24px); }
to { opacity: 1; transform: translateY(0); }
}
/* Hero scroll indicator */
.hero-scroll {
position: absolute;
bottom: var(--space-8);
left: 50%;
transform: translateX(-50%);
z-index: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: var(--space-2);
color: rgba(255,255,255,0.4);
font-size: var(--text-xs);
letter-spacing: 0.1em;
text-transform: uppercase;
animation: heroFadeUp 1s ease forwards 1.2s;
opacity: 0;
}
.hero-scroll-mouse {
width: 22px;
height: 34px;
border: 2px solid rgba(255,255,255,0.25);
border-radius: 11px;
position: relative;
}
.hero-scroll-mouse::after {
content: '';
position: absolute;
top: 5px;
left: 50%;
transform: translateX(-50%);
width: 3px;
height: 7px;
background: var(--amber);
border-radius: 2px;
animation: scrollDot 1.6s ease infinite;
}
@keyframes scrollDot {
0%, 100% { transform: translateX(-50%) translateY(0); opacity: 1; }
60% { transform: translateX(-50%) translateY(8px); opacity: 0; }
}
/* --- Trust / Stats Bar ------------------------------------ */
.trust-bar {
background: var(--charcoal);
padding-block: var(--space-10);
border-bottom: 1px solid var(--border-dark);
}
.trust-bar-inner {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: var(--space-8);
align-items: center;
}
.trust-stat {
text-align: center;
padding-inline: var(--space-4);
position: relative;
}
.trust-stat + .trust-stat::before {
content: '';
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
height: 40px;
width: 1px;
background: var(--border-dark);
}
.trust-stat-number {
display: block;
font-size: clamp(var(--text-2xl), 4vw, var(--text-4xl));
font-weight: 800;
color: var(--amber);
letter-spacing: -0.03em;
line-height: 1;
}
.trust-stat-label {
display: block;
font-size: var(--text-xs);
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--ash);
margin-top: var(--space-2);
}
/* --- Service Cards ---------------------------------------- */
.service-card {
background: var(--white);
border-radius: var(--radius-lg);
overflow: hidden;
border: 1px solid var(--border-light);
transition: transform var(--transition), box-shadow var(--transition);
position: relative;
display: flex;
flex-direction: column;
}
.service-card:hover {
transform: translateY(-6px);
box-shadow: var(--shadow-xl);
}
.service-card-img {
height: 220px;
background: var(--grain);
overflow: hidden;
position: relative;
}
.service-card-img img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
.service-card:hover .service-card-img img {
transform: scale(1.05);
}
.service-card-img-placeholder {
width: 100%;
height: 100%;
background: var(--bark-mid);
display: flex;
align-items: center;
justify-content: center;
}
.service-card-body {
padding: var(--space-6);
flex: 1;
}
.service-card-body h3 {
font-size: var(--text-xl);
margin-bottom: var(--space-3);
color: var(--charcoal);
}
.service-card-body p {
font-size: var(--text-sm);
color: var(--smoke);
line-height: 1.65;
max-width: none;
}
.service-card-footer {
padding: 0 var(--space-6) var(--space-6);
display: flex;
align-items: center;
justify-content: space-between;
}
.service-card-link {
font-size: var(--text-sm);
font-weight: 700;
color: var(--amber);
letter-spacing: 0.04em;
display: flex;
align-items: center;
gap: var(--space-2);
transition: gap var(--transition);
}
.service-card-link:hover { gap: var(--space-3); }
.service-card-link::after {
content: '→';
}
/* --- Process Steps --------------------------------------- */
.process-steps {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-8);
position: relative;
}
.process-steps::before {
content: '';
position: absolute;
top: 32px;
left: calc(100%/6);
right: calc(100%/6);
height: 1px;
background: rgba(200,139,42,0.3);
z-index: 0;
}
.process-step {
text-align: center;
position: relative;
z-index: 1;
}
.process-step-num,
.process-num {
width: 64px;
height: 64px;
background: var(--amber);
color: var(--ink);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: var(--text-xl);
font-weight: 800;
margin: 0 auto var(--space-6);
position: relative;
z-index: 1;
flex-shrink: 0;
}
.process-step h3 {
font-size: var(--text-xl);
color: var(--white);
margin-bottom: var(--space-3);
}
.process-step p {
font-size: var(--text-sm);
color: var(--ash);
line-height: 1.7;
max-width: 26ch;
margin-inline: auto;
}
/* --- FAQ Accordion --------------------------------------- */
.faq-list {
display: flex;
flex-direction: column;
gap: var(--space-2);
}
.faq-item {
border: 1px solid var(--border-light);
border-radius: var(--radius);
overflow: hidden;
background: var(--white);
transition: box-shadow var(--transition);
}
.faq-item.open { box-shadow: var(--shadow); }
.faq-question {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--space-5) var(--space-6);
cursor: pointer;
gap: var(--space-4);
user-select: none;
}
.faq-question h4 {
font-size: var(--text-base);
font-weight: 600;
color: var(--charcoal);
margin: 0;
letter-spacing: 0;
line-height: 1.4;
}
.faq-icon {
width: 28px;
height: 28px;
border-radius: 50%;
background: var(--grain);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
transition: background var(--transition), transform var(--transition);
}
.faq-icon::after {
content: '+';
font-size: var(--text-md);
font-weight: 700;
color: var(--amber);
line-height: 1;
transition: transform var(--transition);
}
.faq-item.open .faq-icon {
background: var(--amber);
transform: rotate(45deg);
}
.faq-item.open .faq-icon::after {
color: var(--ink);
}
.faq-answer {
max-height: 0;
overflow: hidden;
transition: max-height 0.4s ease, padding 0.3s ease;
}
.faq-answer-inner {
padding: 0 var(--space-6) var(--space-5);
font-size: var(--text-sm);
color: var(--smoke);
line-height: 1.75;
border-top: 1px solid var(--border-light);
padding-top: var(--space-4);
}
.faq-item.open .faq-answer {
max-height: 400px;
}
/* --- Testimonial Cards ----------------------------------- */
.testimonial-card {
background: var(--charcoal);
border: 1px solid var(--border-dark);
border-radius: var(--radius-lg);
padding: var(--space-8);
position: relative;
}
.testimonial-card::before {
content: '"';
position: absolute;
top: var(--space-4);
right: var(--space-6);
font-size: 80px;
font-weight: 800;
color: rgba(200,139,42,0.15);
line-height: 1;
font-family: Georgia, serif;
}
.testimonial-stars {
display: flex;
gap: 2px;
margin-bottom: var(--space-4);
}
.testimonial-stars span {
color: var(--amber);
font-size: var(--text-lg);
}
.testimonial-text {
font-size: var(--text-sm);
color: rgba(255,255,255,0.75);
line-height: 1.75;
margin-bottom: var(--space-6);
max-width: none;
}
.testimonial-author {
display: flex;
align-items: center;
gap: var(--space-3);
border-top: 1px solid var(--border-dark);
padding-top: var(--space-5);
}
.testimonial-avatar {
width: 44px;
height: 44px;
border-radius: 50%;
background: var(--bark);
border: 2px solid var(--border-dark);
display: flex;
align-items: center;
justify-content: center;
color: var(--ash);
font-size: var(--text-lg);
flex-shrink: 0;
}
.testimonial-info strong {
display: block;
font-size: var(--text-sm);
color: var(--white);
font-weight: 600;
}
.testimonial-info span {
font-size: var(--text-xs);
color: var(--smoke);
}
/* --- Before / After Gallery ------------------------------ */
.gallery-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: var(--space-4);
}
.gallery-item {
position: relative;
overflow: hidden;
border-radius: var(--radius);
aspect-ratio: 4/3;
background: var(--bark);
}
.gallery-item img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.6s ease;
}
.gallery-item:hover img { transform: scale(1.04); }
.gallery-item-label {
position: absolute;
bottom: var(--space-3);
left: var(--space-3);
background: rgba(12,8,5,0.8);
color: var(--white);
font-size: var(--text-xs);
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: var(--space-1) var(--space-3);
border-radius: var(--radius-full);
}
.gallery-item-label--after { background: rgba(200,139,42,0.9); color: var(--ink); }
/* Before/After slider */
.ba-slider {
position: relative;
overflow: hidden;
border-radius: var(--radius-lg);
cursor: ew-resize;
user-select: none;
aspect-ratio: 16/9;
background: var(--bark);
}
.ba-slider img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
pointer-events: none;
}
.ba-before-wrap {
position: absolute;
inset: 0;
overflow: hidden;
width: 50%;
transition: width 0s;
}
.ba-before-wrap img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
min-width: 200%;
}
.ba-handle {
position: absolute;
top: 0;
bottom: 0;
left: 50%;
width: 3px;
background: var(--white);
transform: translateX(-50%);
z-index: 10;
}
.ba-handle-grip {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 40px;
height: 40px;
background: var(--white);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: var(--shadow-lg);
}
.ba-label {
position: absolute;
bottom: var(--space-4);
padding: var(--space-2) var(--space-4);
font-size: var(--text-xs);
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
border-radius: var(--radius-full);
z-index: 5;
}
.ba-label--before {
left: var(--space-4);
background: rgba(12,8,5,0.75);
color: var(--white);
}
.ba-label--after {
right: var(--space-4);
background: var(--amber);
color: var(--ink);
}
/* --- Location Cards -------------------------------------- */
.location-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));
gap: var(--space-4);
}
.location-card {
display: flex;
align-items: center;
gap: var(--space-4);
padding: var(--space-5) var(--space-6);
background: var(--charcoal);
border: 1px solid var(--border-dark);
border-radius: var(--radius);
transition: background var(--transition), border-color var(--transition), transform var(--transition);
text-decoration: none;
color: var(--white);
}
.location-card:hover {
background: var(--bark);
border-color: var(--amber);
transform: translateY(-2px);
}
.location-card-icon {
width: 36px;
height: 36px;
background: var(--bark);
border-radius: var(--radius);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.location-card-icon svg {
width: 16px;
height: 16px;
fill: var(--amber);
}
.location-card-text strong {
display: block;
font-size: var(--text-sm);
font-weight: 700;
}
.location-card-text span {
display: block;
font-size: var(--text-xs);
color: var(--ash);
margin-top: 2px;
}
/* --- Why Choose Section ---------------------------------- */
.benefit-card {
display: flex;
gap: var(--space-5);
align-items: flex-start;
}
.benefit-icon {
width: 52px;
height: 52px;
background: rgba(200,139,42,0.15);
border-radius: var(--radius);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.benefit-icon svg {
width: 24px;
height: 24px;
fill: var(--amber);
}
.benefit-body h4 {
font-size: var(--text-md);
color: var(--white);
margin-bottom: var(--space-2);
}
.benefit-body p {
font-size: var(--text-sm);
color: var(--ash);
line-height: 1.7;
max-width: none;
}
/* --- Page Hero (inner pages) ----------------------------- */
.page-hero {
background: var(--charcoal);
padding: calc(var(--header-h) + 4rem) 0 4rem;
position: relative;
overflow: hidden;
}
.page-hero::before {
content: '';
position: absolute;
inset: 0;
background: var(--bark);
opacity: 0.3;
}
.page-hero-inner {
position: relative;
z-index: 1;
}
.page-hero h1 { color: var(--white); }
.page-hero .lead { color: var(--ash); max-width: 60ch; }
.breadcrumb {
display: flex;
align-items: center;
gap: var(--space-2);
font-size: var(--text-xs);
font-weight: 600;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--smoke);
margin-bottom: var(--space-5);
}
.breadcrumb a {
color: var(--amber);
transition: color var(--transition);
}
.breadcrumb a:hover { color: var(--amber-light); }
.breadcrumb-sep { color: var(--smoke); }
/* --- CTA Strip ------------------------------------------ */
.cta-strip {
background: var(--amber);
color: var(--ink);
padding-block: var(--space-12);
text-align: center;
}
.cta-strip h2 {
color: var(--ink);
margin-bottom: var(--space-4);
}
.cta-strip p {
color: rgba(12,8,5,0.75);
font-size: var(--text-md);
margin: 0 auto var(--space-8);
max-width: 52ch;
}
.cta-strip .btn--outline-dark {
border-color: var(--ink);
color: var(--ink);
}
.cta-strip .btn--outline-dark:hover {
background: var(--ink);
color: var(--white);
}
/* --- Contact Form Section -------------------------------- */
.contact-section {
background: var(--bg-light-alt);
}
.contact-layout {
display: grid;
grid-template-columns: 5fr 4fr;
gap: var(--space-16);
align-items: start;
}
.contact-info-list {
display: flex;
flex-direction: column;
gap: var(--space-6);
}
.contact-info-item {
display: flex;
gap: var(--space-4);
align-items: flex-start;
}
.contact-info-icon {
width: 48px;
height: 48px;
background: var(--charcoal);
border-radius: var(--radius);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.contact-info-icon svg {
width: 20px;
height: 20px;
fill: var(--amber);
}
.contact-info-item h5 {
font-size: var(--text-xs);
letter-spacing: 0.1em;
color: var(--smoke);
margin-bottom: var(--space-1);
}
.contact-info-item a,
.contact-info-item p {
font-size: var(--text-md);
font-weight: 600;
color: var(--charcoal);
max-width: none;
}
.contact-form-wrap {
background: var(--white);
border-radius: var(--radius-lg);
padding: var(--space-10);
box-shadow: var(--shadow-lg);
}
.contact-detail {
display: flex;
align-items: baseline;
gap: var(--space-3);
padding: var(--space-3) 0;
border-bottom: 1px solid var(--border);
font-size: var(--text-sm);
}
.contact-detail:last-of-type { border-bottom: none; }
.contact-detail strong {
min-width: 130px;
font-weight: 700;
color: var(--ink);
flex-shrink: 0;
}
.contact-detail a { color: var(--bark); font-weight: 600; }
.contact-detail span { color: var(--smoke); }
/* About preview two-column layout */
.about-preview-inner {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--space-16);
align-items: center;
}
.about-preview-text .divider {
width: 48px;
height: 3px;
background: var(--amber);
border-radius: 2px;
margin: var(--space-4) 0 var(--space-5);
}
.about-preview-img {
border-radius: var(--radius-lg);
overflow: hidden;
aspect-ratio: 4/3;
}
.about-preview-img img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* About story two-column layout */
.about-story {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--space-16);
align-items: center;
}
.about-story-img {
border-radius: var(--radius-lg);
overflow: hidden;
aspect-ratio: 4/3;
}
.about-story-img img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* Service intro two-column layout */
.service-intro {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--space-12);
align-items: center;
}
.service-intro-img {
border-radius: var(--radius-lg);
overflow: hidden;
aspect-ratio: 4/3;
}
.service-intro-img img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* Location service cards */
.card--service-local {
padding: var(--space-8) var(--space-6);
}
.card--service-local h3 {
font-size: var(--text-xl);
color: var(--ink);
margin-bottom: var(--space-3);
}
.card--service-local p {
font-size: var(--text-sm);
color: var(--smoke);
line-height: 1.7;
}
/* Benefit item (service pages) */
.benefit-item {
background: var(--white);
border-radius: var(--radius-lg);
border: 1px solid var(--border-light);
padding: var(--space-8) var(--space-6);
transition: box-shadow var(--transition), transform var(--transition);
}
.benefit-item:hover {
box-shadow: var(--shadow);
transform: translateY(-2px);
}
.benefit-item h3 {
font-size: var(--text-xl);
color: var(--ink);
margin-bottom: var(--space-3);
}
.benefit-item p {
font-size: var(--text-sm);
color: var(--smoke);
line-height: 1.7;
}
/* Native details/summary FAQ */
details.faq-item {
border: 1px solid var(--border-light);
border-radius: var(--radius);
background: var(--white);
overflow: hidden;
}
details.faq-item + details.faq-item { margin-top: var(--space-2); }
details.faq-item summary {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--space-5) var(--space-6);
font-size: var(--text-base);
font-weight: 600;
color: var(--charcoal);
cursor: pointer;
list-style: none;
gap: var(--space-4);
}
details.faq-item summary::-webkit-details-marker { display: none; }
details.faq-item summary::after {
content: '+';
font-size: 1.25rem;
font-weight: 400;
color: var(--amber);
flex-shrink: 0;
transition: transform 0.2s ease;
}
details.faq-item[open] summary::after { transform: rotate(45deg); }
details.faq-item p {
padding: 0 var(--space-6) var(--space-5);
font-size: var(--text-sm);
color: var(--smoke);
line-height: 1.7;
margin: 0;
}
/* --- Location pills --------------------------------------- */
.locations-pill-list {
display: flex;
flex-wrap: wrap;
gap: var(--space-3);
justify-content: center;
margin-top: var(--space-10);
}
.location-pill {
display: inline-flex;
align-items: center;
padding: var(--space-3) var(--space-6);
background: var(--white);
border: 1.5px solid var(--border-light);
border-radius: 999px;
font-size: var(--text-sm);
font-weight: 600;
color: var(--bark);
box-shadow: 0 1px 4px rgba(0,0,0,0.07);
transition: background var(--transition), border-color var(--transition), color var(--transition), box-shadow var(--transition);
}
.location-pill:hover {
background: var(--bark);
border-color: var(--bark);
color: var(--white);
box-shadow: 0 4px 12px rgba(0,0,0,0.12);
}
/* --- Credential stats ------------------------------------- */
.credential-item {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
gap: var(--space-2);
padding: var(--space-8) var(--space-4);
}
.credential-item strong {
font-size: var(--text-4xl);
font-weight: 800;
color: var(--amber);
line-height: 1;
}
.credential-item span {
font-size: var(--text-sm);
color: var(--ash);
letter-spacing: 0.04em;
}
/* --- Responsive ------------------------------------------ */
@media (max-width: 1024px) {
.footer-grid { grid-template-columns: 1fr 1fr; gap: var(--space-8); }
.trust-bar-inner { grid-template-columns: repeat(2, 1fr); gap: var(--space-6); }
.trust-stat + .trust-stat::before { display: none; }
.contact-layout { grid-template-columns: 1fr; }
}
/* 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; }
.process-steps::before { display: none; }
.gallery-grid { grid-template-columns: 1fr; }
.footer-grid { grid-template-columns: 1fr; gap: var(--space-8); }
.footer-bottom { flex-direction: column; text-align: center; }
.trust-bar-inner { grid-template-columns: repeat(2, 1fr); }
.contact-form-wrap { padding: var(--space-6); }
.ba-slider { aspect-ratio: 4/3; }
}
@media (max-width: 480px) {
.trust-bar-inner { grid-template-columns: 1fr; }
.hero-trust { flex-direction: column; gap: var(--space-4); }
.header-logo-sub { display: none; }
}
/* Narrow phones: drop Get Estimate btn, hamburger + logo only */
@media (max-width: 480px) {
.header-cta .btn--sm { display: none; }
.header-inner { gap: var(--space-4); }
}
/* Ultra-narrow phones (320px) */
@media (max-width: 360px) {
.header-logo img { height: 36px !important; }
.container { padding-inline: 0.875rem; }
}
/* --- Premium Elevation Pass ----------------------------- */
/* Hero: refined layout, larger stat section */
.hero-content {
max-width: 860px;
}
.hero h1 {
font-size: clamp(2.75rem, 6vw, 5.5rem);
letter-spacing: -0.03em;
line-height: 1.04;
}
.hero-trust {
gap: 3rem;
}
.hero-trust-stat strong {
font-size: clamp(1.75rem, 4vw, 2.75rem);
}
/* Gallery: taller items, 2x2 luxury grid */
.gallery-grid {
grid-template-columns: repeat(2, 1fr);
gap: 0.5rem;
}
.gallery-item {
aspect-ratio: 3/2;
border-radius: var(--radius);
}
/* Service card: taller image area */
.service-card-img {
height: 260px;
}
/* Section separator line */
.section-sep {
width: 100%;
height: 1px;
background: var(--border-light);
margin: 0;
}
.section-sep--dark {
background: var(--border-dark);
}
/* Luxury about split : larger image aspect */
.about-img-wrap {
border-radius: var(--radius-xl);
overflow: hidden;
aspect-ratio: 3/4;
background: var(--grain);
}
.about-img-wrap img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center top;
}
/* Testimonial track subtle scroll on desktop */
.testimonial-track {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-6);
}
/* Trust bar larger numbers */
.trust-stat-number {
font-size: clamp(2rem, 4.5vw, 3.5rem);
}
/* CTA strip stronger */
.cta-strip {
padding-block: clamp(4rem, 8vw, 7rem);
}
.cta-strip h2 {
font-size: clamp(2rem, 4vw, 3.25rem);
line-height: 1.1;
}
/* Process step numbers : larger */
.process-step-num {
width: 72px;
height: 72px;
font-size: 1.6rem;
box-shadow: 0 0 0 6px rgba(200,139,42,0.15);
}
/* FAQ : premium border treatment */
.faq-item {
border-left: 3px solid transparent;
transition: border-color var(--transition), box-shadow var(--transition);
}
.faq-item.open {
border-left-color: var(--amber);
}
/* Benefit card hover */
.benefit-card {
padding: var(--space-5);
border-radius: var(--radius-lg);
border: 1px solid var(--border-dark);
transition: background var(--transition), border-color var(--transition);
}
.benefit-card:hover {
background: rgba(200,139,42,0.05);
border-color: rgba(200,139,42,0.25);
}
/* Contact form wrap : elevated shadow */
.contact-form-wrap {
box-shadow: 0 32px 80px rgba(0,0,0,0.14), 0 8px 24px rgba(0,0,0,0.08);
}
/* ============================================================
LUXURY ELEVATION : v2
============================================================ */
/* Services 2×2 grid */
.services-grid-2x2 {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: clamp(1.5rem, 3vw, 2.5rem);
}
@media (max-width: 680px) {
.services-grid-2x2 {
grid-template-columns: 1fr;
}
}
/* Taller service card images for impact */
.services-grid-2x2 .service-card-img {
height: 300px;
}
/* Service card : luxury border accent on hover */
.services-grid-2x2 .service-card {
border-top: 3px solid transparent;
transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}
.services-grid-2x2 .service-card:hover {
border-top-color: var(--amber);
transform: translateY(-8px);
box-shadow: 0 24px 60px rgba(0,0,0,0.12);
}
/* Testimonial cards : richer treatment */
.testimonial-card {
background: var(--white);
border-radius: var(--radius-lg);
padding: clamp(1.75rem, 3vw, 2.5rem);
border: 1px solid var(--border-light);
position: relative;
box-shadow: 0 4px 24px rgba(0,0,0,0.06);
transition: box-shadow var(--transition), transform var(--transition);
}
.testimonial-card::before {
content: '\201C';
position: absolute;
top: 1.25rem;
right: 1.75rem;
font-size: 5rem;
line-height: 1;
color: var(--amber);
opacity: 0.18;
font-family: Georgia, serif;
font-weight: 700;
}
.testimonial-card:hover {
box-shadow: 0 16px 48px rgba(0,0,0,0.1);
transform: translateY(-4px);
}
.testimonial-stars {
display: flex;
gap: 3px;
margin-bottom: var(--space-4);
}
.testimonial-stars span {
color: var(--amber);
font-size: 1.1rem;
}
.testimonial-text {
font-size: var(--text-base);
line-height: 1.75;
color: var(--smoke);
margin-bottom: var(--space-5);
font-style: italic;
}
.testimonial-author {
display: flex;
align-items: center;
gap: var(--space-3);
}
.testimonial-avatar {
width: 44px;
height: 44px;
border-radius: 50%;
background: var(--amber);
color: var(--ink);
font-weight: 800;
font-size: 1.1rem;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.testimonial-info strong {
display: block;
font-size: var(--text-sm);
font-weight: 700;
color: var(--charcoal);
}
.testimonial-info span {
font-size: var(--text-xs);
color: var(--smoke);
text-transform: uppercase;
letter-spacing: 0.05em;
}
/* Gallery grid : full-bleed dramatic layout */
.gallery-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: clamp(0.5rem, 1.5vw, 1rem);
}
.gallery-item {
position: relative;
overflow: hidden;
border-radius: var(--radius-md);
aspect-ratio: 4/3;
background: var(--bark-mid);
cursor: pointer;
}
.gallery-item img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.6s ease;
}
.gallery-item:hover img {
transform: scale(1.04);
}
.gallery-item-label {
position: absolute;
bottom: 0.875rem;
left: 0.875rem;
background: rgba(12,8,5,0.75);
color: var(--ash);
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
padding: 0.3rem 0.65rem;
border-radius: var(--radius-sm);
backdrop-filter: blur(4px);
}
.gallery-item-label--after {
background: var(--amber);
color: var(--ink);
}
/* Location card : luxury elevated */
.location-card {
display: flex;
align-items: center;
gap: var(--space-3);
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.1);
border-radius: var(--radius-lg);
padding: 1.25rem 1.5rem;
text-decoration: none;
transition: background var(--transition), border-color var(--transition), transform var(--transition);
}
.location-card:hover {
background: rgba(200,139,42,0.12);
border-color: rgba(200,139,42,0.4);
transform: translateY(-3px);
}
.location-card-icon svg {
width: 20px;
height: 20px;
fill: var(--amber);
}
.location-card-text strong {
display: block;
font-size: var(--text-sm);
font-weight: 700;
color: var(--white);
}
.location-card-text span {
font-size: var(--text-xs);
color: var(--ash);
text-transform: uppercase;
letter-spacing: 0.06em;
}
/* Section headers : more dramatic */
.section-header h2,
.section-header--center h2 {
font-size: clamp(2rem, 4.5vw, 3.25rem);
line-height: 1.1;
letter-spacing: -0.02em;
}
/* Hero h1 */
.hero-content h1 {
font-size: clamp(2.25rem, 4.5vw, 3.75rem);
line-height: 1.1;
letter-spacing: -0.02em;
font-weight: 800;
color: var(--white);
}
/* Benefit icon : amber filled circle */
.benefit-icon {
width: 52px;
height: 52px;
background: rgba(200,139,42,0.12);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
border: 1.5px solid rgba(200,139,42,0.3);
}
.benefit-icon svg {
width: 22px;
height: 22px;
stroke: var(--amber);
fill: none;
stroke-width: 1.75;
stroke-linecap: round;
stroke-linejoin: round;
}
.benefit-body h4 {
font-size: var(--text-lg);
font-weight: 700;
color: var(--white);
margin-bottom: var(--space-2);
}
.benefit-body p {
color: var(--ash);
line-height: 1.7;
}
/* On light sections, use dark text */
.section--light .benefit-body h4,
.section--alt .benefit-body h4 {
color: var(--charcoal);
}
.section--light .benefit-body p,
.section--alt .benefit-body p {
color: var(--smoke);
}
.benefit-card {
display: flex;
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, <select> and <input> 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;
}
}
/* CTA banner sections with photo background */
.cta-section {
position: relative;
background-image: url('/assets/images/refinishing-machine.webp');
background-size: cover;
background-position: center;
color: var(--text-on-dark);
}
.cta-section::before {
content: '';
position: absolute;
inset: 0;
background: rgba(12, 8, 5, 0.78);
}
.cta-section-inner {
position: relative;
z-index: 1;
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-8);
flex-wrap: wrap;
}
.cta-section-text h2 { color: var(--white); }
.cta-section-text p { color: rgba(240,232,218,0.8); max-width: 52ch; }
.cta-section .btn--primary {
flex-shrink: 0;
box-shadow: 0 4px 20px rgba(200,139,42,0.4);
}
@media (max-width: 768px) {
.cta-section-inner { flex-direction: column; text-align: center; }
.cta-section-text p { margin-inline: auto; }
}
/* Service grid cards (home page) */
.card--service {
display: flex;
flex-direction: column;
text-decoration: none;
color: var(--text-on-light);
}
.card--service .card-img-wrap {
height: 220px;
overflow: hidden;
flex-shrink: 0;
}
.card--service .card-img-wrap img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
.card--service:hover .card-img-wrap img { transform: scale(1.05); }
.card--service .card-body {
padding: var(--space-6);
flex: 1;
display: flex;
flex-direction: column;
}
.card--service .card-body h3 {
font-size: var(--text-xl);
color: var(--charcoal);
margin-bottom: var(--space-3);
}
.card--service .card-body p {
font-size: var(--text-sm);
color: var(--smoke);
line-height: 1.65;
max-width: none;
flex: 1;
}
.card--service .card-link {
display: inline-flex;
align-items: center;
gap: var(--space-2);
font-size: var(--text-sm);
font-weight: 700;
color: var(--amber);
letter-spacing: 0.04em;
margin-top: var(--space-4);
transition: gap var(--transition);
}
.card--service:hover .card-link { gap: var(--space-3); }