"Untitled"
Bootstrap 4.1.1 Snippet by go4hydrovac

<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <!------ Include the above in your HEAD tag ----------> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Go4 Hydrovac | Business Profile</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="profile-page"> <!-- Animated Background --> <div class="water-bg"> <div class="wave wave-one"></div> <div class="wave wave-two"></div> <div class="wave wave-three"></div> </div> <!-- Main Profile --> <main class="profile-card"> <!-- LEFT SIDE --> <section class="profile-left"> <div class="brand-top"> <span class="brand-line"></span> HYDRO EXCAVATION </div> <div class="logo-box"> <img src="https://i0.wp.com/go4hydrovac.com/wp-content/uploads/2024/04/go4-logo.webp?w=446&ssl=1" alt="Go4 Hydrovac Logo" > </div> <h1> Go4 <strong>Hydrovac</strong> </h1> <p class="business-type"> Plumbing Service </p> <div class="location"> <span>●</span> Pittsburgh, Pennsylvania </div> <div class="profile-actions"> <a href="tel:+17247441464" class="primary-btn"> <span>☎</span> Call Now </a> <a href="https://go4hydrovac.com/" target="_blank" class="secondary-btn" > Visit Website </a> </div> <div class="social-row"> <a href="mailto:roger@go4hydrovac.com"> ✉ Email </a> <a href="https://www.facebook.com/Go4Hydrovac" target="_blank" > f Facebook </a> </div> </section> <!-- RIGHT SIDE --> <section class="profile-right"> <div class="top-status"> <span class="status-dot"></span> <span id="businessStatus"> Checking availability... </span> <span class="status-time"> MON - FRI </span> </div> <!-- INTRO --> <div class="intro"> <span class="section-number"> 01 </span> <div> <span class="mini-title"> WHO WE ARE </span> <h2> Excavation Without <span>the Guesswork.</span> </h2> <p> Go4 Hydrovac is a locally owned and operated hydro excavation company serving Pittsburgh and surrounding Pennsylvania counties. </p> </div> </div> <!-- STATS --> <div class="stats"> <div class="stat"> <strong>24/7</strong> <span> Emergency<br> Response </span> </div> <div class="stat"> <strong>4</strong> <span> PA Counties<br> Served </span> </div> <div class="stat"> <strong>2</strong> <span> Residential &<br> Commercial </span> </div> </div> <!-- SERVICES --> <div class="service-area"> <div class="service-heading"> <div> <span class="mini-title"> CAPABILITIES </span> <h2> What We Do </h2> </div> <button id="showServices"> VIEW ALL </button> </div> <div class="service-list"> <div class="service-item"> <span class="service-icon">
* { margin: 0; padding: 0; box-sizing: border-box; } :root { --orange: #f4a500; --dark: #071014; --dark2: #0b181e; --light: #f4f7f8; --muted: #84949b; --border: rgba(255,255,255,.09); } body { font-family: Arial, Helvetica, sans-serif; background: #05090b; color: var(--light); min-height: 100vh; overflow-x: hidden; } /* ===================================== PAGE ===================================== */ .profile-page { min-height: 100vh; padding: 50px 25px; position: relative; display: flex; align-items: center; justify-content: center; background: linear-gradient( 135deg, rgba(2,7,9,.98), rgba(4,13,18,.92) ); overflow: hidden; } /* ===================================== WATER BACKGROUND ===================================== */ .water-bg { position: absolute; inset: 0; overflow: hidden; opacity: .45; } .wave { position: absolute; width: 160%; height: 500px; left: -30%; border-radius: 45%; background: linear-gradient( 90deg, transparent, rgba(0,125,170,.18), transparent ); filter: blur(10px); } .wave-one { bottom: -350px; animation: waveMove 12s linear infinite; } .wave-two { bottom: -400px; opacity: .5; animation: waveMove 18s linear infinite reverse; } .wave-three { bottom: -450px; opacity: .35; animation: waveMove 25s linear infinite; } @keyframes waveMove { 0% { transform: translateX(-5%) rotate(0deg); } 50% { transform: translateX(5%) rotate(3deg); } 100% { transform: translateX(-5%) rotate(0deg); } } /* ===================================== PROFILE CARD ===================================== */ .profile-card { position: relative; z-index: 2; width: min(1180px, 100%); min-height: 700px; display: grid; grid-template-columns: 38% 62%; background: rgba(7,15,19,.96); border: 1px solid rgba(255,255,255,.1); border-radius: 25px; overflow: hidden; box-shadow: 0 50px 120px rgba(0,0,0,.7); } /* ===================================== LEFT PROFILE ===================================== */ .profile-left { padding: 50px; position: relative; background: linear-gradient( 160deg, rgba(244,165,0,.13), transparent 40% ), linear-gradient( 180deg, #111c21, #071014 ); border-right: 1px solid var(--border); display: flex; flex-direction: column; justify-content: center; } /* ===================================== BRAND ===================================== */ .brand-top { display: flex; align-items: center; gap: 9px; font-size: 10px; letter-spacing: 2px; color: var(--orange); font-weight: bold; margin-bottom: 25px; } .brand-line { width: 30px; height: 2px; background: var(--orange); } /* ===================================== LOGO ===================================== */ .logo-box { width: 175px; height: 125px; background: white; border-radius: 14px; padding: 12px; display: flex; align-items: center; justify-content: center; margin-bottom: 28px; box-shadow: 0 20px 45px rgba(0,0,0,.35); } .logo-box img { width: 100%; height: 100%; object-fit: contain; } /* ===================================== TITLE ===================================== */ .profile-left h1 { font-size: 58px; line-height: .9; letter-spacing: -3px; text-transform: uppercase; } .profile-left h1 strong { display: block; color: var(--orange); } .business-type { margin-top: 15px; color: #b8c2c6; font-size: 15px; } .location { margin-top: 15px; color: #89989e; font-size: 12px; } .location span { color: var(--orange); margin-right: 5px; } /* ===================================== BUTTONS ===================================== */ .profile-actions { display: flex; gap: 9px; margin-top: 28px; } .profile-actions a { text-decoration: none; padding: 13px 17px; border-radius: 5px; font-size: 12px; font-weight: bold; transition: .3s; } .primary-btn { background: var(--orange); color: #111; } .secondary-btn { background: #172329; color: white; border: 1px solid #2a393f; } .profile-actions a:hover { transform: translateY(-3px); } /* ===================================== SOCIAL ===================================== */ .social-row { display: flex; gap: 18px; margin-top: 22px; } .social-row a { color: #87969c; text-decoration: none; font-size: 11px; transition: .3s; } .social-row a:hover { color: var(--orange); } /* ===================================== RIGHT SIDE ===================================== */ .profile-right { padding: 42px; background: radial-gradient( circle at 90% 10%, rgba(244,165,0,.09), transparent 30% ); } /* ===================================== STATUS ===================================== */ .top-status { display: flex; align-items: center; gap: 9px; color: #7f9198; font-size: 11px; padding-bottom: 25px; border-bottom: 1px solid var(--border); } .status-dot { width: 8px; height: 8px; border-radius: 50%; background: #42d267; box-shadow: 0 0 12px #42d267; } .status-time { margin-left: auto; color: var(--orange); letter-spacing: 1px; } /* ===================================== INTRO ===================================== */ .intro { display: grid; grid-template-columns: 45px 1fr; gap: 15px; padding: 38px 0; } .section-number { color: var(--orange); font-size: 11px; font-weight: bold; } .mini-title { display: block; color: var(--orange); font-size: 9px; letter-spacing: 2px; font-weight: bold; margin-bottom: 8px; } .intro h2 { font-size: 38px; max-width: 600px; line-height: 1.05; letter-spacing: -1px; } .intro h2 span { color: var(--orange); } .intro p { margin-top: 15px; color: var(--muted); max-width: 650px; font-size: 13px; line-height: 1.7; } /* ===================================== STATS ===================================== */ .stats { display: grid; grid-template-columns: repeat(3,1fr); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); } .stat { padding: 22px; border-right: 1px solid var(--border); } .stat:last-child { border-right: none; } .stat strong { display: block; color: var(--orange); font-size: 28px; } .stat span { display: block; margin-top: 6px; color: #75858c; font-size: 10px; line-height: 1.5; } /* ===================================== SERVICES ===================================== */ .service-area { padding-top: 32px; } .service-heading { display: flex; justify-content: space-between; align-items: end; margin-bottom: 17px; } .service-heading h2 { font-size: 25px; } .service-heading button { background: transparent; border: none; color: var(--orange); font-size: 10px; font-weight: bold; cursor: pointer; letter-spacing: 1px; } .service-list { display: grid; grid-template-columns: repeat(2,1fr); gap: 9px; } .service-item { display: flex; align-items: center; gap: 12px; padding: 14px; background: #101c21; border: 1px solid #1d2a30; border-radius: 7px; transition: .3s; } .service-item:hover { border-color: var(--orange); transform: translateY(-3px); } .service-icon { width: 35px; height: 35px; display: flex; align-items: center; justify-content: center; background: #19272d; border-radius: 6px; font-size: 16px; } .service-item strong { display: block; font-size: 11px; } .service-item small { display: block; color: #6f7f85; margin-top: 4px; font-size: 9px; } /* ===================================== COVERAGE ===================================== */ .coverage { margin-top: 28px; padding: 20px; background: #0e191e; border-radius: 9px; border: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; gap: 20px; } .coverage h2 { font-size: 18px; } .county-list { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; max-width: 450px; } .county-list span { padding: 7px 9px; border-radius: 3px; background: #18262c; color: #a5b1b6; font-size: 9px; } /* ===================================== HOURS ===================================== */ .hours-section { display: flex; justify-content: space-between; align-items: center; margin-top: 25px; padding-top: 20px; border-top: 1px solid var(--border); } .hours-section h3 { font-size: 13px; } .hours-section > strong { color: var(--orange); font-size: 14px; } /* ===================================== MODAL ===================================== */ .services-modal { position: fixed; inset: 0; z-index: 100; display: none; align-items: center; justify-content: center; padding: 20px; background: rgba(0,0,0,.8); backdrop-filter: blur(8px); } .services-modal.active { display: flex; } .modal-box { width: min(700px,100%); max-height: 85vh; overflow-y: auto; padding: 40px; background: #0c171c; border: 1px solid #28373d; border-radius: 15px; position: relative; } .modal-box h2 { font-size: 32px; margin-bottom: 25px; } .close-modal { position: absolute; top: 20px; right: 20px; width: 35px; height: 35px; border: none; background: #19272d; color: white; border-radius: 50%; font-size: 20px; cursor: pointer; } .modal-services { display: grid; grid-template-columns: repeat(2,1fr); gap: 8px; } .modal-services span { padding: 13px; background: #142126; border-left: 2px solid var(--orange); color: #aab6bb; font-size: 11px; } /* ===================================== RESPONSIVE ===================================== */ @media(max-width:900px) { .profile-card { grid-template-columns: 1fr; } .profile-left { border-right: none; border-bottom: 1px solid var(--border); text-align: center; align-items: center; } .profile-right { padding: 30px; } .coverage { flex-direction: column; align-items: flex-start; } .county-list { justify-content: flex-start; } } @media(max-width:600px) { .profile-page { padding: 10px; } .profile-left { padding: 35px 25px; } .profile-left h1 { font-size: 48px; } .profile-right { padding: 22px; } .intro { grid-template-columns: 1fr; } .intro h2 { font-size: 30px; } .stats { grid-template-columns: 1fr; } .stat { border-right: none; border-bottom: 1px solid var(--border); } .service-list { grid-template-columns: 1fr; } .coverage { align-items: flex-start; } .county-list { display: grid; grid-template-columns: 1fr 1fr; width: 100%; } .hours-section { align-items: flex-start; gap: 15px; flex-direction: column; } .profile-actions { flex-direction: column; width: 100%; } .profile-actions a { width: 100%; text-align: center; } .modal-services { grid-template-columns: 1fr; } .modal-box { padding: 25px; } }
/* ========================================== GO4 HYDROVAC PROFILE JAVASCRIPT ========================================== */ /* ========================================== BUSINESS HOURS STATUS ========================================== */ function updateBusinessStatus() { const status = document.getElementById("businessStatus"); const now = new Date(); const day = now.getDay(); const hours = now.getHours(); const minutes = now.getMinutes(); const currentMinutes = hours * 60 + minutes; const opening = 8 * 60; const closing = 17 * 60; /* Monday = 1 Friday = 5 */ const weekday = day >= 1 && day <= 5; if ( weekday && currentMinutes >= opening && currentMinutes < closing ) { status.textContent = "Open Now"; status.style.color = "#55d96a"; } else { status.textContent = "Currently Closed"; status.style.color = "#88979d"; } } updateBusinessStatus(); setInterval( updateBusinessStatus, 60000 ); /* ========================================== SERVICES MODAL ========================================== */ const openButton = document.getElementById("showServices"); const closeButton = document.getElementById("closeServices"); const modal = document.getElementById("servicesModal"); openButton.addEventListener( "click", function() { modal.classList.add("active"); document.body.style.overflow = "hidden"; } ); closeButton.addEventListener( "click", function() { modal.classList.remove("active"); document.body.style.overflow = ""; } ); /* Click outside modal */ modal.addEventListener( "click", function(event) { if ( event.target === modal ) { modal.classList.remove( "active" ); document.body.style.overflow = ""; } } ); /* ESC key */ document.addEventListener( "keydown", function(event) { if ( event.key === "Escape" ) { modal.classList.remove( "active" ); document.body.style.overflow = ""; } } ); /* ========================================== MOUSE LIGHT EFFECT ========================================== */ const profile = document.querySelector(".profile-card"); document.addEventListener( "mousemove", function(event) { const x = (event.clientX / window.innerWidth) * 100; const y = (event.clientY / window.innerHeight) * 100; profile.style.background = ` radial-gradient( circle at ${x}% ${y}%, rgba(244,165,0,.055), rgba(7,15,19,.97) 35% ) `; } ); /* ========================================== SERVICE CARD HOVER MOTION ========================================== */ const serviceItems = document.querySelectorAll( ".service-item" ); serviceItems.forEach( function(item) { item.addEventListener( "mousemove", function(event) { const rect = item.getBoundingClientRect(); const x = event.clientX - rect.left; const y = event.clientY - rect.top; const rotateX = ((y / rect.height) - 0.5) * -4; const rotateY = ((x / rect.width) - 0.5) * 4; item.style.transform = ` perspective(500px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) translateY(-3px) `; } ); item.addEventListener( "mouseleave", function() { item.style.transform = ""; } ); } ); /* ========================================== RANDOM WATER PARTICLES ========================================== */ const water = document.querySelector(".water-bg"); for ( let i = 0; i < 25; i++ ) { const particle = document.createElement("span"); particle.style.position = "absolute"; particle.style.width = Math.random() * 3 + 1 + "px"; particle.style.height = particle.style.width; particle.style.borderRadius = "50%"; particle.style.background = "rgba(130,210,240,.35)"; particle.style.left = Math.random() * 100 + "%"; particle.style.top = Math.random() * 100 + "%"; particle.style.animation = `particleMove ${4 + Math.random() * 6}s ease-in-out infinite`; particle.style.animationDelay = Math.random() * 4 + "s"; water.appendChild( particle ); } /* ========================================== DYNAMIC PARTICLE ANIMATION ========================================== */ const particleStyle = document.createElement("style"); particleStyle.innerHTML = ` @keyframes particleMove { 0%,100% { transform: translateY(0) translateX(0); opacity: .1; } 50% { transform: translateY(-70px) translateX(25px); opacity: .8; } } `; document.head.appendChild( particleStyle );

Questions / Comments: