/* ============================================ Williams Pressure Washing Services Professional Responsive Website ============================================ */ /* --- CSS Variables --- */ :root { --blue-dark: #0a2463; --blue-mid: #1e56a0; --blue-light: #3a8fd4; --blue-accent: #4dc8f5; --cyan-bright: #00e0ff; --white: #ffffff; --off-white: #f0f6ff; --gray-light: #e8edf3; --gray: #8899aa; --text-dark: #1a2332; --text-mid: #3d4f63; --green: #22c55e; --green-dark: #16a34a; --shadow: 0 4px 24px rgba(10, 36, 99, 0.12); --shadow-lg: 0 12px 40px rgba(10, 36, 99, 0.18); --radius: 12px; --radius-lg: 20px; --transition: 0.3s ease; } /* --- Reset & Base --- */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; font-size: 16px; } body { font-family: 'Open Sans', Arial, sans-serif; color: var(--text-dark); line-height: 1.6; overflow-x: hidden; background: var(--white); } h1, h2, h3, h4 { font-family: 'Montserrat', sans-serif; line-height: 1.2; } a { text-decoration: none; color: inherit; } ul { list-style: none; } img { max-width: 100%; } .container { max-width: 1200px; margin: 0 auto; padding: 0 24px; } .accent { color: var(--blue-accent); } /* --- Buttons --- */ .btn { display: inline-flex; align-items: center; gap: 8px; padding: 14px 28px; border-radius: 50px; font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 1rem; cursor: pointer; border: none; transition: all var(--transition); text-align: center; justify-content: center; } .btn-icon { flex-shrink: 0; } .btn-primary { background: linear-gradient(135deg, var(--blue-accent), var(--blue-light)); color: var(--white); box-shadow: 0 4px 16px rgba(77, 200, 245, 0.4); } .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(77, 200, 245, 0.5); } .btn-secondary { background: rgba(255, 255, 255, 0.15); color: var(--white); border: 2px solid rgba(255, 255, 255, 0.5); backdrop-filter: blur(4px); } .btn-secondary:hover { background: rgba(255, 255, 255, 0.25); border-color: var(--white); transform: translateY(-2px); } .btn-large { padding: 18px 36px; font-size: 1.125rem; } .btn-block { width: 100%; } /* --- Navigation --- */ .navbar { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; padding: 16px 0; transition: all var(--transition); } .navbar.scrolled { background: rgba(10, 36, 99, 0.95); backdrop-filter: blur(12px); padding: 10px 0; box-shadow: 0 2px 20px rgba(0, 0, 0, 0.2); } .nav-container { max-width: 1200px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; } .logo { display: flex; align-items: center; gap: 8px; font-family: 'Montserrat', sans-serif; font-weight: 900; font-size: 1.25rem; color: var(--white); } .logo-icon { font-size: 1.5rem; } .logo-text .accent { color: var(--cyan-bright); } .nav-links { display: flex; align-items: center; gap: 32px; } .nav-links a { color: rgba(255, 255, 255, 0.85); font-weight: 600; font-size: 0.95rem; transition: color var(--transition); font-family: 'Montserrat', sans-serif; } .nav-links a:hover { color: var(--cyan-bright); } .nav-cta { background: linear-gradient(135deg, var(--cyan-bright), var(--blue-accent)); color: var(--blue-dark) !important; padding: 10px 22px; border-radius: 50px; font-weight: 700 !important; transition: all var(--transition); } .nav-cta:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0, 224, 255, 0.4); } .nav-toggle { display: none; flex-direction: column; gap: 5px; background: none; border: none; cursor: pointer; padding: 4px; } .nav-toggle span { display: block; width: 26px; height: 3px; background: var(--white); border-radius: 2px; transition: all var(--transition); } /* --- Hero Section --- */ .hero { position: relative; min-height: 100vh; display: flex; align-items: center; justify-content: center; text-align: center; background: linear-gradient(135deg, #0a2463 0%, #1e56a0 40%, #2d7dd2 70%, #00c6ff 100%); overflow: hidden; padding: 120px 24px 80px; } .hero::before { content: ''; position: absolute; inset: 0; background: radial-gradient(circle at 20% 80%, rgba(0, 224, 255, 0.15) 0%, transparent 50%), radial-gradient(circle at 80% 20%, rgba(77, 200, 245, 0.2) 0%, transparent 50%), radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.05) 0%, transparent 70%); animation: heroFloat 8s ease-in-out infinite; } @keyframes heroFloat { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } } /* Water drops animation */ .hero::after { content: ''; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background-image: radial-gradient(circle, rgba(255,255,255,0.08) 2px, transparent 2px), radial-gradient(circle, rgba(255,255,255,0.05) 1px, transparent 1px); background-size: 80px 80px, 50px 50px; background-position: 0 0, 25px 25px; animation: waterDrips 20s linear infinite; } @keyframes waterDrips { 0% { transform: translateY(-100px); } 100% { transform: translateY(100px); } } .hero-content { position: relative; z-index: 2; max-width: 800px; } .hero-badge { display: inline-block; background: rgba(255, 255, 255, 0.12); border: 1px solid rgba(255, 255, 255, 0.2); backdrop-filter: blur(8px); color: var(--white); padding: 8px 20px; border-radius: 50px; font-size: 0.9rem; font-weight: 600; margin-bottom: 24px; } .hero-title { font-size: clamp(2.2rem, 6vw, 4rem); font-weight: 900; color: var(--white); margin-bottom: 12px; text-shadow: 0 2px 20px rgba(0, 0, 0, 0.2); } .hero-title .accent { color: var(--cyan-bright); } .hero-slogan { font-family: 'Montserrat', sans-serif; font-size: clamp(1.2rem, 3vw, 1.6rem); color: var(--cyan-bright); font-style: italic; font-weight: 600; margin-bottom: 16px; } .hero-sub { font-size: clamp(1rem, 2vw, 1.15rem); color: rgba(255, 255, 255, 0.9); margin-bottom: 32px; line-height: 1.8; } .hero-ctas { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; } .scroll-indicator { position: absolute; bottom: 32px; left: 50%; transform: translateX(-50%); z-index: 2; color: rgba(255, 255, 255, 0.6); font-size: 0.85rem; text-align: center; font-family: 'Montserrat', sans-serif; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; animation: scrollBounce 2s ease-in-out infinite; } .scroll-arrow { width: 24px; height: 24px; border-right: 3px solid rgba(255, 255, 255, 0.5); border-bottom: 3px solid rgba(255, 255, 255, 0.5); transform: rotate(45deg); margin: 8px auto 0; } @keyframes scrollBounce { 0%, 100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(8px); } } /* --- Section Titles --- */ .section-title { text-align: center; font-size: clamp(1.8rem, 4vw, 2.5rem); font-weight: 900; color: var(--blue-dark); margin-bottom: 8px; } .section-subtitle { text-align: center; color: var(--text-mid); font-size: 1.1rem; margin-bottom: 48px; } /* --- Services --- */ .services { padding: 100px 0; background: var(--off-white); } .services-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 28px; margin-bottom: 48px; } .service-card { background: var(--white); border-radius: var(--radius-lg); padding: 36px 28px; box-shadow: var(--shadow); transition: all var(--transition); position: relative; overflow: hidden; border: 1px solid var(--gray-light); } .service-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, var(--blue-accent), var(--cyan-bright)); transform: scaleX(0); transform-origin: left; transition: transform var(--transition); } .service-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); } .service-card:hover::before { transform: scaleX(1); } .service-card.featured { border: 2px solid var(--blue-accent); transform: scale(1.03); } .service-card.featured::before { transform: scaleX(1); } .service-card.featured:hover { transform: scale(1.03) translateY(-6px); } .featured-badge { position: absolute; top: 16px; right: 16px; background: linear-gradient(135deg, var(--blue-accent), var(--blue-light)); color: var(--white); padding: 4px 14px; border-radius: 50px; font-size: 0.75rem; font-weight: 700; font-family: 'Montserrat', sans-serif; text-transform: uppercase; letter-spacing: 0.5px; } .service-icon { font-size: 3rem; margin-bottom: 16px; } .service-card h3 { font-size: 1.3rem; color: var(--blue-dark); margin-bottom: 12px; } .service-card p { color: var(--text-mid); font-size: 0.95rem; margin-bottom: 16px; } .service-features { font-size: 0.9rem; color: var(--text-mid); } .service-features li { padding: 4px 0; } .services-cta { text-align: center; } /* --- Why Us --- */ .why-us { padding: 100px 0; background: linear-gradient(135deg, var(--blue-dark) 0%, var(--blue-mid) 100%); color: var(--white); } .why-us .section-title { color: var(--white); } .why-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 32px; } .why-item { text-align: center; padding: 32px 20px; border-radius: var(--radius-lg); background: rgba(255, 255, 255, 0.06); border: 1px solid rgba(255, 255, 255, 0.1); transition: all var(--transition); } .why-item:hover { background: rgba(255, 255, 255, 0.12); transform: translateY(-4px); } .why-icon { font-size: 2.5rem; margin-bottom: 16px; } .why-item h4 { font-size: 1.15rem; margin-bottom: 8px; color: var(--cyan-bright); } .why-item p { color: rgba(255, 255, 255, 0.8); font-size: 0.95rem; } /* --- About --- */ .about { padding: 100px 0; background: var(--white); } .about-container { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; align-items: center; } .about-visual { position: relative; display: flex; align-items: center; justify-content: center; } .about-watermark { font-size: 8rem; opacity: 0.08; color: var(--blue-accent); position: absolute; user-select: none; } .about-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; width: 100%; } .stat { background: linear-gradient(135deg, var(--blue-dark), var(--blue-mid)); border-radius: var(--radius-lg); padding: 32px 20px; text-align: center; color: var(--white); box-shadow: var(--shadow-lg); transition: transform var(--transition); } .stat:hover { transform: scale(1.05); } .stat-number { font-family: 'Montserrat', sans-serif; font-size: 2.2rem; font-weight: 900; color: var(--cyan-bright); margin-bottom: 4px; } .stat-label { font-size: 0.85rem; line-height: 1.4; opacity: 0.9; } .about-content h2 { font-size: clamp(1.6rem, 3vw, 2.2rem); color: var(--blue-dark); margin-bottom: 20px; } .about-content p { color: var(--text-mid); margin-bottom: 16px; font-size: 1.05rem; } .about-content .btn { margin-top: 16px; } /* --- Contact --- */ .contact { padding: 100px 0; background: var(--off-white); } .contact-grid { display: grid; grid-template-columns: 1fr 1.2fr; gap: 48px; align-items: start; } .contact-info h3 { font-size: 1.5rem; color: var(--blue-dark); margin-bottom: 24px; } .contact-card { background: var(--white); border-radius: var(--radius-lg); padding: 28px; box-shadow: var(--shadow); margin-bottom: 24px; } .contact-item { display: flex; align-items: center; gap: 16px; padding: 16px 0; border-bottom: 1px solid var(--gray-light); } .contact-item:last-child { border-bottom: none; } .contact-icon { font-size: 1.8rem; flex-shrink: 0; } .contact-item strong { display: block; color: var(--blue-dark); font-family: 'Montserrat', sans-serif; font-size: 0.9rem; margin-bottom: 2px; } .contact-item a, .contact-item span { color: var(--text-mid); font-size: 1rem; } .contact-item a:hover { color: var(--blue-accent); } .contact-cta { text-align: center; } /* --- Contact Form --- */ .contact-form-wrapper { background: var(--white); border-radius: var(--radius-lg); padding: 40px; box-shadow: var(--shadow-lg); border: 1px solid var(--gray-light); } .form-group { margin-bottom: 20px; margin-top: 20px; } .form-group label { display: block; font-weight: 600; font-family: 'Montserrat', sans-serif; font-size: 0.9rem; color: var(--blue-dark); margin-bottom: 6px; } .form-group input, .form-group select, .form-group textarea { width: 100%; padding: 12px 16px; border: 2px solid var(--gray-light); border-radius: var(--radius); font-family: 'Open Sans', sans-serif; font-size: 1rem; color: var(--text-dark); transition: all var(--transition); background: var(--off-white); } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: var(--blue-accent); background: var(--white); box-shadow: 0 0 0 4px rgba(77, 200, 245, 0.15); } .form-group textarea { resize: vertical; min-height: 100px; } .form-note { text-align: center; color: var(--gray); font-size: 0.85rem; margin-top: 16px; margin-bottom: 32px; } /* Add breathing room between privacy text and first form field */ .contact-form-wrapper > .contact-form > .form-group:first-child { margin-top: 0; } /* --- How It Works --- */ .how-it-works { padding: 100px 0; background: var(--off-white); } .steps-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 40px; max-width: 900px; margin: 0 auto; } .step-card { text-align: center; padding: 32px 24px; } .step-number { display: inline-flex; align-items: center; justify-content: center; width: 48px; height: 48px; background: linear-gradient(135deg, var(--blue-accent), var(--cyan-bright)); color: var(--blue-dark); font-family: 'Montserrat', sans-serif; font-weight: 900; font-size: 1.4rem; border-radius: 50%; margin-bottom: 16px; box-shadow: 0 4px 16px rgba(77, 200, 245, 0.3); } .step-icon { font-size: 3rem; margin-bottom: 12px; } .step-card h4 { font-size: 1.2rem; color: var(--blue-dark); margin-bottom: 8px; } .step-card p { color: var(--text-mid); font-size: 0.95rem; } .step-card a { color: var(--blue-accent); font-weight: 600; } /* --- Gallery --- */ .gallery { padding: 100px 0; background: var(--white); } .gallery-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 32px; margin-bottom: 24px; } .gallery-item { border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow); } .gallery-before-after { position: relative; width: 100%; aspect-ratio: 4 / 3; overflow: hidden; } .gallery-before-after img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; } .gallery-before-after img:last-child { clip-path: inset(0 50% 0 0); transition: clip-path 0.3s ease; } .gallery-item:hover .gallery-before-after img:last-child { clip-path: inset(0 0 0 0); } .gallery-label { position: absolute; top: 12px; padding: 4px 14px; border-radius: 50px; font-family: 'Montserrat', sans-serif; font-weight: 700; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.5px; color: var(--white); z-index: 2; } .gallery-label-before { left: 12px; background: rgba(0, 0, 0, 0.6); } .gallery-label-after { right: 12px; background: rgba(34, 197, 94, 0.85); } .gallery-caption { padding: 16px 20px; background: var(--white); font-family: 'Montserrat', sans-serif; font-weight: 600; font-size: 0.95rem; color: var(--text-dark); text-align: center; } .gallery-note { text-align: center; color: var(--gray); font-size: 0.9rem; } /* --- Our Work --- */ .our-work { padding: 100px 0; background: var(--off-white); } .work-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 20px; max-width: 900px; margin: 0 auto 24px; } .work-item { border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow); background: var(--white); } .work-item img { width: 100%; height: 240px; object-fit: cover; display: block; } .work-caption { padding: 14px 18px; font-family: 'Montserrat', sans-serif; font-weight: 600; font-size: 0.9rem; color: var(--text-dark); text-align: center; } /* --- Testimonials --- */ .testimonials { padding: 100px 0; background: linear-gradient(135deg, var(--blue-dark) 0%, var(--blue-mid) 100%); color: var(--white); } .testimonials .section-title { color: var(--white); } .testimonials-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 28px; } .testimonial-card { background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.12); border-radius: var(--radius-lg); padding: 32px 28px; transition: all var(--transition); } .testimonial-card:hover { background: rgba(255, 255, 255, 0.14); transform: translateY(-4px); } .testimonial-stars { font-size: 1.2rem; margin-bottom: 12px; } .testimonial-text { color: rgba(255, 255, 255, 0.9); font-size: 1rem; line-height: 1.7; margin-bottom: 20px; font-style: italic; } .testimonial-author { display: flex; flex-direction: column; gap: 2px; } .testimonial-author strong { color: var(--cyan-bright); font-size: 1rem; } .testimonial-author span { color: rgba(255, 255, 255, 0.6); font-size: 0.85rem; } /* --- Footer --- */ .footer { background: var(--blue-dark); color: var(--white); padding: 48px 0 24px; } .footer-content { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 24px; padding-bottom: 24px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); margin-bottom: 24px; } .footer-brand h3 { font-size: 1.3rem; margin-bottom: 4px; } .footer-brand .slogan { color: var(--cyan-bright); font-style: italic; font-size: 0.95rem; } .footer-contact { display: flex; gap: 24px; flex-wrap: wrap; } .footer-phone, .footer-email { color: rgba(255, 255, 255, 0.8); font-size: 0.95rem; transition: color var(--transition); } .footer-phone:hover, .footer-email:hover { color: var(--cyan-bright); } .footer-bottom { text-align: center; color: rgba(255, 255, 255, 0.4); font-size: 0.85rem; } /* --- Floating CTA (mobile) --- */ .floating-cta { position: fixed; bottom: 24px; right: 24px; width: 60px; height: 60px; background: linear-gradient(135deg, var(--green), var(--green-dark)); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--white); box-shadow: 0 4px 20px rgba(34, 197, 94, 0.5); z-index: 999; transition: all var(--transition); animation: pulse 2s ease-in-out infinite; } .floating-cta:hover { transform: scale(1.1); } @keyframes pulse { 0%, 100% { box-shadow: 0 4px 20px rgba(34, 197, 94, 0.5); } 50% { box-shadow: 0 4px 30px rgba(34, 197, 94, 0.8); } } /* --- Responsive --- */ @media (max-width: 900px) { .about-container { grid-template-columns: 1fr; gap: 40px; } .about-visual { order: -1; } .contact-grid { grid-template-columns: 1fr; } .service-card.featured { transform: none; } .service-card.featured:hover { transform: translateY(-6px); } } @media (max-width: 768px) { .nav-container { padding: 0 12px; } .logo-text { font-size: 1rem; } .logo-icon { font-size: 1.2rem; } .nav-toggle span { width: 22px; } .nav-links { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(10, 36, 99, 0.97); flex-direction: column; align-items: center; justify-content: center; gap: 28px; z-index: 999; } .nav-links.active { display: flex; } .nav-links a { font-size: 1.3rem; } .nav-toggle { display: flex; z-index: 1000; } .nav-toggle.active span:nth-child(1) { transform: rotate(45deg) translate(6px, 6px); } .nav-toggle.active span:nth-child(2) { opacity: 0; } .nav-toggle.active span:nth-child(3) { transform: rotate(-45deg) translate(6px, -6px); } .hero { padding: 140px 20px 60px; min-height: 100svh; } .hero-ctas { flex-direction: column; align-items: center; } .services-grid { grid-template-columns: 1fr; } .why-grid { grid-template-columns: 1fr 1fr; } .footer-content { flex-direction: column; text-align: center; } .footer-contact { justify-content: center; } .contact-form-wrapper { padding: 28px 20px; } .stat { padding: 24px 16px; } .stat-number { font-size: 1.8rem; } } @media (max-width: 480px) { .logo-text { font-size: 0.85rem; } .logo { gap: 4px; max-width: 60%; } .logo-text .accent { display: inline; } .why-grid { grid-template-columns: 1fr; } .about-stats { grid-template-columns: 1fr; } .hero-badge { font-size: 0.8rem; } } @media (max-width: 360px) { .logo-text { font-size: 0.75rem; } .logo { max-width: 55%; } }