1<!DOCTYPE html > 2<html lang="en"> 3<head id=123> 4 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 6 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"/> 7 8 <title>Contact Gary's Plumbing, Inc. | Irvine, CA</title> 9 <link href="/images/layout01/favicon.ico" type="image/x-icon" rel="shortcut icon"/> 10 <meta name="description" content="Contact Gary's Plumbing, Inc. in Irvine, CA. Call us today for professional service."/> 11 <link rel="canonical" href="https://gary-s-plumbing.com/contact.htm"/> 12 <meta property="og:type" content="website"/> 13 <meta property="og:title" content="Contact Gary's Plumbing, Inc. | Irvine, CA"/> 14 <meta property="og:description" content="Contact Gary's Plumbing, Inc. in Irvine, CA. Call us today for professional service."/> 15 <meta property="og:url" content="https://gary-s-plumbing.com/contact.htm"/> 16 <meta property="og:site_name" content="Gary's Plumbing, Inc."/> 17 <meta name="twitter:card" content="summary"/> 18 <meta name="google-site-verification" content="LJnsGmK6O7PBrcnm8-iy-FuVb9KyhxvvYvMbJyWGOag"/> 19 <meta name="msvalidate.01" content="1F45F9DE9326EAFCF993AAACB733F10C"/> 20 21 22 <!--suppress RegExpAnonymousGroup --> 23 <style> 24 /* W3.CSS 4.04 Apr 2017 by Jan Egil and Borge Refsnes */ 25html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit} 26/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */ 27html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0} 28article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block} 29audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline} 30audio:not([controls]){display:none;height:0}[hidden],template{display:none} 31a{background-color:transparent} 32a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline dotted} 33dfn{font-style:italic}mark{background:#ff0;color:#000} 34small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} 35sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none}svg:not(:root){overflow:hidden} 36code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible} 37button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold} 38button,input{overflow:visible}button,select{text-transform:none} 39button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button} 40button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner{border-style:none;padding:0} 41button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring{outline:1px dotted ButtonText} 42fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} 43legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto} 44[type=checkbox],[type=radio]{padding:0} 45[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto} 46[type=search]{-webkit-appearance:textfield;outline-offset:-2px} 47[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none} 48::-webkit-input-placeholder{color:inherit;opacity:0.54} 49::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} 50/* End extract */ 51html,body{font-family:"Segoe UI",system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.5}html{overflow-x:hidden} 52h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.w3-serif{font-family:serif} 53h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",system-ui,-apple-system,sans-serif;font-weight:500;margin:10px 0}.w3-wide{letter-spacing:4px} 54hr{border:0;border-top:1px solid #eee;margin:20px 0} 55.w3-image{max-width:100%;height:auto}img{margin-bottom:-5px}a{color:inherit} 56.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc} 57.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1} 58.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1} 59.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center} 60.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top} 61.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px} 62.w3-btn,.w3-button{border:none;display:inline-block;outline:0;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap} 63.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)} 64.w3-btn,.w3-button{-webkit-touch-callout:none;user-select:none} 65.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none} 66.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none} 67.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%} 68.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none}
69.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block} 70.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s} 71.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%} 72.w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc} 73.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer} 74.w3-dropdown-hover:hover .w3-dropdown-content{display:block;z-index:1} 75.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000} 76.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000} 77.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0} 78.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px} 79.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto} 80.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%} 81.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%} 82.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px} 83.w3-main,#main{transition:margin-left .4s} 84.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)} 85.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px} 86.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto} 87.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;outline:none;display:block} 88.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left} 89.w3-bar .w3-button{white-space:normal} 90.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;outline:none;white-space:normal;float:none} 91.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%} 92.w3-responsive{overflow-x:auto} 93.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before, 94.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both} 95.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%} 96.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%} 97.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%} 98.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%} 99@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%} 100 .w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%} 101 .w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}} 102@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%} 103 .w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%} 104 .w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}} 105.w3-content{max-width:980px;margin:auto}.w3-rest{overflow:hidden} 106.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell} 107.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom} 108.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important} 109@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px} 110 .w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative} 111 .w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center} 112 .w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}} 113@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}}
114@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}} 115@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}} 116@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}} 117.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0} 118.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2} 119.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0} 120.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0} 121.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)} 122.w3-display-left{position:absolute;top:50%;left:0;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)} 123.w3-display-right{position:absolute;top:50%;right:0;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)} 124.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} 125.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} 126.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none} 127.w3-display-position{position:absolute} 128.w3-circle{border-radius:50%} 129.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px} 130.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px} 131/* Cards in 2-/3-column rows stretch to equal height. :has() scopes this to rows that contain cards so other column layouts keep float behavior; browsers without :has() fall back to unequal heights. */ 132.w3-row-padding:has(> .w3-half > .w3-card),.w3-row-padding:has(> .w3-third > .w3-card){display:flex;flex-wrap:wrap} 133.w3-row-padding>.w3-half:has(> .w3-card),.w3-row-padding>.w3-third:has(> .w3-card){display:flex;flex-direction:column;float:none} 134.w3-row-padding>.w3-half>.w3-card,.w3-row-padding>.w3-third>.w3-card{flex:1} 135.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px} 136.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px} 137.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} 138.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} 139.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)} 140.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)} 141.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} 142.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} 143.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}} 144.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}} 145.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}} 146.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}} 147.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}} 148.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}} 149.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important} 150.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1} 151.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75} 152.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)} 153.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)} 154.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)} 155.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important} 156.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important} 157.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important} 158.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important} 159.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important} 160.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important} 161.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important} 162.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important} 163.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important} 164.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important} 165.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important} 166.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important} 167.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important} 168.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important} 169.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important} 170.w3-left{float:left!important}.w3-right{float:right!important} 171.w3-button:hover{color:#000!important;background-color:#ccc!important} 172.w3-transparent,.w3-hover-none:hover{background-color:transparent!important} 173.w3-hover-none:hover{box-shadow:none!important}
174/* Colors */ 175.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important} 176.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important} 177.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important} 178.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important} 179.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important} 180.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important} 181.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important} 182.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important} 183.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important} 184.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important} 185.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important} 186.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important} 187.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important} 188.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important} 189.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important} 190.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important} 191.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important} 192.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important} 193.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important} 194.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important} 195.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important} 196.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important} 197.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important} 198.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#bbb!important} 199.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important} 200.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important} 201.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important} 202.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important} 203.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important} 204.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important} 205.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important} 206.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important} 207.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important} 208.w3-text-yellow,.w3-hover-text-yellow:hover{color:#ffeb3b!important} 209.w3-text-white,.w3-hover-text-white:hover{color:#fff!important} 210.w3-text-black,.w3-hover-text-black:hover{color:#000!important} 211.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important} 212.w3-text-amber{color:#ffc107!important} 213.w3-text-aqua{color:#00ffff!important} 214.w3-text-light-blue{color:#87CEEB!important} 215.w3-text-brown{color:#795548!important} 216.w3-text-cyan{color:#00bcd4!important} 217.w3-text-blue-grey,.w3-text-blue-gray{color:#607d8b!important} 218.w3-text-light-green{color:#8bc34a!important} 219.w3-text-indigo{color:#3f51b5!important} 220.w3-text-khaki{color:#b4aa50!important} 221.w3-text-lime{color:#cddc39!important} 222.w3-text-orange{color:#ff9800!important} 223.w3-text-deep-orange{color:#ff5722!important} 224.w3-text-pink{color:#e91e63!important} 225.w3-text-purple{color:#9c27b0!important} 226.w3-text-deep-purple{color:#673ab7!important} 227.w3-text-sand{color:#fdf5e6!important} 228.w3-text-teal{color:#009688!important} 229.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important} 230.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important} 231.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important} 232.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important}
233.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important} 234.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important} 235.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important} 236.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important} 237.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#bbb!important} 238 239/*********************************************************/ 240 241.w3-container.pad0 { padding: 0; } 242.pad-sides-10 { padding-left: 10px; padding-right: 10px} 243 244body { 245 margin:0; 246 font-family: "Segoe UI",system-ui,-apple-system,sans-serif; 247 color: black; 248 /* see: https://stackoverflow.com/questions/2545542/font-size-rendering-inconsistencies-on-an-iphone*/ 249 -webkit-text-size-adjust: 100%; 250} 251 252h1, h2, h3, h4 { 253 font-family: "Segoe UI",system-ui,-apple-system,sans-serif; 254 font-weight: 500; 255 line-height: 1.2; 256} 257h1 {font-size: 36px;} 258h2 {font-size: 30px;} 259h3 {font-size: 24px;} 260h4 {font-size: 20px;} 261p { 262 font-weight: 400; 263 line-height: 1.5; 264} 265a { 266 color: #2971b3; 267 font-weight: 500; 268} 269.CallToAction { 270 text-align: center; 271} 272div.CallToAction { 273 margin-top: 80px; 274 margin-bottom: 80px; 275} 276.CallToAction h1, .CallToAction h2, .CallToAction h3, .CallToAction h4, .CallToAction a { 277 font-weight: 500; 278} 279.CallToAction p b { 280 font-weight: 500; 281} 282div.CallToAction a.phoneNumber { 283 font-size: 40px; 284} 285 286#header { 287 position: fixed; 288 top: 0; 289 left: 0; 290 z-index: 999; 291 width: 100%; /* margins can make 100% width wider than viewport */ 292 box-shadow: 0 2px lightgrey; 293} 294.headerStyle, .headerStyle * { 295 font-weight:300; 296} 297.headerLine1Style h1 { 298 font-size: 8vmin; 299 line-height: 1.4em; 300 justify-content: right; 301 /*margin-left: 20px;*/ 302 /*margin-right: 20px;*/ 303} 304@media screen and (min-width: 320px) { 305 .headerLine1Style h1 { 306 font-size: 20px; 307 } 308} 309@media screen and (min-width: 768px) { 310 .headerLine1Style h1 { 311 font-size: 30px; 312 } 313} 314@media screen and (min-width: 922px) { 315 .headerLine1Style h1 { 316 font-size: 36px; 317 } 318} 319@media only screen and (device-width: 768px) and (device-height: 1024px) and (-webkit-min-device-pixel-ratio: 1) { 320 /* ipad fix - font wider than windows */ 321 .headerLine1Style h1 { 322 font-size: 28px; 323 } 324} 325.header_line1_company { 326 max-width: 60%; 327} 328.headerLine1Style a { 329 text-decoration: none; 330 cursor: pointer; 331} 332.headerLine1Style a h2 { 333 margin: 0; 334} 335 336.headingTxt{text-align:center; font-size:34px; font-weight:bold; color:#000000; line-height:2; 337 padding-top:10px; 338} 339.headingTxt small{ display:block; font-weight:normal; font-size:18px;} 340 341.contentX { 342 text-align: left; 343} 344.contentX h1, .contentX h2, .contentX h3, .contentX h4 { 345 margin-top: 1.2em; 346 margin-bottom: 1.2em; 347} 348.contentX img { 349 margin: 0 -16px 10px; 350 border: 3px transparent; 351 max-width: calc(100% + 32px); 352} 353.contentX img[style*="width:100%"], 354.contentX img[style*="width: 100%"] { 355 width: calc(100% + 32px) !important; 356 height: auto !important; 357} 358.contentX img[style*="float:left"], 359.contentX img[style*="float: left"], 360.contentX img.floatleft { 361 margin: 0 15px 10px 0; 362 max-width: 100%; 363} 364.contentX img[style*="float:right"], 365.contentX img[style*="float: right"] { 366 margin: 0 0 10px 15px; 367 max-width: 100%; 368} 369.contentX img.autoPost { 370 margin-left: 0; 371 margin-bottom: 0; 372 border: 2px solid transparent ; 373 vertical-align: bottom; 374} 375.contentX figure { 376 margin: 0 0 2em; 377} 378.photoPage { max-width: 700px; margin: 0 auto} 379.photoPage p {min-height: 1.25em} 380.photoPage p img { margin: 0 auto 4px} 381 382.contentX ul { margin-bottom: 20px} 383.contentX li { 384 margin-bottom: 10px; 385 list-style-type: disc; 386} 387 388.contentX { 389 overflow:hidden; 390 font-size:16px; 391 line-height:1.7; 392 color:#000000; 393 padding: 40px 16px; 394} 395 396#header_subtext { 397 font-weight: normal; 398 color: black; 399 padding: 0 0 10px 0; 400 font-size: 20px; 401} 402.greyblocks{overflow:hidden; text-align:center; font-size:20px; font-weight:600; 403 margin: 10px auto 10px; 404} 405.greyblocks-box { 406 border-color: #f0f0f0; 407 border-width: 1px; 408 border-style: solid; 409 padding:10px; 410 max-width: 600px; 411 margin: 35px auto 35px; 412} 413.greyblock-col-1{padding:10px 0; background:#ffffff; overflow:hidden; margin:10px 0 0 0;box-sizing: unset} 414.greyblocks span{color:#2971b3; font-weight:500; font-size:18px} 415.greyblocks img {max-width:100%; height:auto; border-style: none} 416 417.callfreeQuote{text-align:center; padding:10px 0; overflow:hidden; clear:both; font-size:30px; font-weight:normal;
417 color:#000000;} 418.callUsBtn{clear:both; width:280px; padding:10px 10px; border-radius:40px; background:#49b9bf; font-size:30px; font-weight:bold; color:#ffffff; margin:10px auto;} 419.callUsBtn i{ padding:6px 10px; background:#ffffff; color:#49b9bf; border-radius:50px; } 420 421.getPriceDiv{background:#428bca; padding:14px 2px 2px 2px; text-align:center; font-size:26px; color:#ffffff; overflow:hidden; 422 margin: 35px auto 35px; 423 max-width: 640px; 424 border-radius: 12px; 425 box-shadow: 0 4px 20px rgba(0,0,0,0.10); 426} 427.getPriceFormDiv{background:#f6f7fe; padding:20px 20px 10px 20px; overflow:hidden; margin:10px 0 0 0; border-radius: 0 0 10px 10px;} 428.getPriceFormDiv ul{padding:0; margin:0; list-style-type:none;} 429.getPriceFormDiv ul li{padding:6px 0; margin:0; display:block; font-size:14px; } 430.text-field{border:1px solid #d4d4d4; color:#555; font-weight:normal; padding:14px; width:92%; font-size: 15px; border-radius: 6px; transition: border-color 0.2s;} 431.text-field:focus{border-color:#2971b3; outline:none;} 432.check-field { padding-left: 24px; text-align: left; vertical-align: center;} 433.check-field label { color: black;} 434.submit-field{background:#2971b3; border: medium none; padding: 14px 0; display: inline-block; cursor: pointer; color: #FFF; width: 100%; 435 font-size: 20px; 436 border-radius: 8px; 437 font-weight: 500; 438 transition: background-color 0.2s, transform 0.1s; 439} 440.submit-field:hover{background:#1e5f99;} 441.submit-field:active{transform: scale(0.98);} 442textarea{font-size:16px; font-weight:normal;} 443.followus img{padding:15px} 444 445.cities-panel{ 446 padding-bottom: 30px; 447} 448 449.cities-panel h2,.cities-panel h3 { 450 display: inline-block; 451} 452.cities-panel h3 {margin:30px 0 } 453.cities-panel ul{ 454 padding:0; 455 margin:0; 456 list-style-type:none; 457 overflow: hidden; 458} 459.cities-panel ul li{ 460 margin-bottom: 2px; 461 font-size:16px; 462 font-weight:500; display:inline-block; line-height:28px; width:29%; 463} 464.cities-panel ul li a{text-decoration: none} 465.cities-panel ul li a:hover{text-decoration:underline;} 466 467.wrapperuseful{padding:0; overflow:hidden;} 468.usefullinksDiv{padding:0 15px 15px 15px; overflow:hidden;} 469.usefullinksDiv h2{ font-size:28px; font-weight:bold; color:#000000; padding:0; margin:0;} 470.usefullinksDiv ul{ list-style:none; margin:0 0 10px 0; padding:0; overflow:hidden;} 471.usefullinksDiv ul li { 472 margin:0 0 0 40px; padding:5px 0; float:left; width:26%; 473} 474.usefullinksDiv ul li a{ color:#000000; text-decoration:none;} 475a.reviewBtn{ 476 text-decoration:none; display:block; clear:both; 477 margin: 0 auto; 478} 479a.reviewBtn div { 480 background: orange; 481 border: medium none; 482 padding: 10px 0; 483 cursor: pointer; 484 color: #FFF; 485 font-size: 20px; 486 text-align: center; 487 border-radius: 6px; 488 margin: 50px auto; 489 font-weight: 400; 490} 491 492.smallScreenMenuPhone a, .header_line1_phone a { 493 cursor: pointer; 494 color: #FFF; 495 text-align:center; 496} 497 498.useboxright{ 499 text-align:center; background: black; padding:15px;
499 color:#ffffff; 500 font-weight: 300; 501} 502.callNoDiv{ 503 padding:10px; text-align:center; font-size:26px; 504 color:#ffffff; 505 border-radius: 6px; 506 max-width: 300px; 507 margin: 0 auto; 508} 509.callNoDiv a { 510 text-align:center; font-size:32px; 511 color:#ffffff; text-decoration: none; position: relative; 512 513 font-weight: 400; 514 border-radius:6px; 515 border-style: solid; 516 border-color: rgba(170, 170, 170, .4); 517 border-width: 1px; 518 padding: 2px 20px 5px; 519 520} 521.callNoDiv span a{font-size:.6em} 522 523footer { margin-top: 40px } 524.footerDivMn{ 525 width:100%; 526 text-align:center; 527 font-size:12px; 528 color:#ffffff; 529 background: #2971b3; 530 clear:both; 531} 532 533.toggleMenu { 534 display:none; 535 clear:both; 536 font-size: 16px; 537 color: white; 538 padding: 10px 10px 10px 10px; 539 cursor: pointer; 540} 541a.toggleMenu {text-decoration:none;} 542 543.contentX a.phoneNumber, a.phoneNumber { 544 color: #2870b3; 545 text-decoration: none; 546 white-space: nowrap; 547} 548 549#townServiceList p { 550 min-height: 50px; 551} 552#townServiceList img { 553 float: left; 554 border: none; 555 margin: 8px 10px 0 0; 556 box-shadow: 2px 2px 2px grey; 557 width: 50px; 558 height: 50px !important; 559 max-width: 50px; 560} 561#townServiceList a { 562 font-weight: 700; 563 font-size: 15px; 564 text-decoration:none; 565} 566 567div.BBB { 568 padding-top: 10px; 569} 570p.BBBText { 571 font-size: 16px; 572 font-weight: bold; 573 text-align: center; 574} 575p.BBBText a { 576 text-decoration: none; 577} 578p.BBBImage { 579 text-align: center; 580} 581.contentX p.BBBImage img { 582 display: inline-block; 583 margin-right: 10px; 584 margin-left: 10px; 585} 586.BBBImage img { 587 border:none; 588 margin: 0; 589 box-shadow: none; 590} 591.BBB_script { 592 width: 282px; 593 margin: auto; 594 padding: 30px 0 30px 0; 595} 596 597img.CreditCard { 598 max-width:100%; 599 padding-top: 15px; 600} 601.license { margin: auto; } 602 603ul.listCSV { 604 padding:0 605} 606.listCSV li {
607 display: inline; 608} 609.listCSV li:after { 610 content: ", "; 611} 612.listCSV li:last-child:after { 613 content: ""; 614} 615hr { 616 clear: both; 617 margin-top: 20px; 618 margin-bottom: 20px; 619 border: 0; 620 border-top: 1px solid #d6d6d6; 621} 622ul.zipCodesServed li { 623 font-weight: 400; 624} 625 626/* override inline style ... update all themes, then remove inline style in site_render */ 627p.ctaPhone a{font-size: 36px; text-align: center} 628 629.smallScreenHeader {display: none} 630.showLargeScreenHeader { 631 display:inherit 632} 633.showLargeScreenHeader a { 634 font-size: 36px; 635} 636.headerBackground { 637 background-color: darkorange; 638} 639 640.contentX { 641 width: 100%; 642} 643 644.contentX .selectTestimonials { 645 clear: both; 646 margin-top: 40px; 647 margin-bottom: 40px; 648} 649.contentX .selectTestimonials ul { 650 padding-left: 0; 651} 652.contentX .selectTestimonials ul li { 653 list-style: none; 654 margin:2px 5px 20px 1px; 655 padding: 18px 22px; 656 border-radius: 8px; 657 box-shadow: 0 2px 12px rgba(0,0,0,0.08); 658 border: 1px solid #eee; 659} 660.contentX .testimonialBody { 661 font-weight: 400; 662 font-style: italic; 663} 664.contentX div.schema.review span[itemprop="ratingValue"] { 665 display:none 666} 667.contentX div.schema.review .review-stars { 668 color: #428BCA; 669 font-size: 20px; 670} 671.contentX div.schema.review span[itemprop="datePublished"]::before { 672 content: "Review date: "; 673 font-size: 12px; 674} 675.contentX div.schema.review span[itemprop="datePublished"] { 676 font-style: italic; 677 color: grey; 678 font-size: 12px; 679} 680span[itemprop="datePublished"] { 681 display:none 682} 683 684.contentX .selectTestimonials ul li strong em, .contentX .selectTestimonials .testimonialAuthor { 685 font-weight: 500; 686 font-style: italic; 687} 688 689.paypal {max-width:100%} 690 691ul.phoneList {list-style: none;padding-left: 0;margin:0 auto} 692footer li.primaryPhone { 693 margin-bottom: 10px; 694} 695.phoneSmall {font-size: 16px; font-weight: normal;} 696.mainTopSpacer {height: 105px} 697 698.w3-container .padGetPrice { 699 padding-top: 40px; 700 margin-top: -40px; 701} 702 703.center-cropped { 704 width: 100%; 705 max-height: 60vh; 706 overflow: hidden; 707} 708@media screen and (min-height: 1000px) { 709 .center-cropped { 710 height: 1000px; 711 } 712} 713@media screen and (max-width: 600px) { 714 .center-cropped { 715 height: 400px; 716 } 717} 718 719/* LCP image - visible with object-fit cover for cropping effect */ 720/* Note: object-position can be overridden per-registration via inline media queries */ 721/* for responsive focal point control (GalleryFocalPoint{Mobile,Tablet,Desktop} reg_vars) */ 722.center-cropped img { 723 width: 100%; 724 height: 100%; 725 object-fit: cover; 726 object-position: center; 727} 728@media (max-width: 768px) { 729 .center-cropped { 730 max-height: 40vh; 731 } 732} 733 734/* Gallery Overlay Styles */ 735.center-cropped.has-overlay { 736 position: relative; 737} 738 739/* Full image tint overlay - covers entire image */ 740.gallery-image-tint { 741 position: absolute; 742 top: 0; 743 left: 0; 744 right: 0; 745 bottom: 0; 746 z-index: 5; /* Above image, below positioned overlay */ 747 pointer-events: none; /* Allow clicks through to image */ 748} 749 750/* Positioned overlay sits above tint */ 751.gallery-overlay { 752 position: absolute; 753 z-index: 10; /* Above tint layer */ 754 padding: 20px; 755 max-width: 80%; 756 color: white; 757 text-shadow: 2px 2px 4px rgba(0,0,0,0.8); 758} 759.gallery-overlay h1, 760.gallery-overlay h2, 761.gallery-overlay h3, 762.gallery-overlay h4, 763.gallery-overlay p { 764 margin: 0 0 0.5em 0; 765 color: inherit; 766 text-shadow: inherit; 767} 768.gallery-overlay a { 769 color: inherit; 770 text-decoration: underline; 771} 772 773/* Overlay vertical positions */ 774.gallery-overlay-top-left, 775.gallery-overlay-top-center, 776.gallery-overlay-top-right { 777 top: 5%; 778} 779.gallery-overlay-middle-left, 780.gallery-overlay-center, 781.gallery-overlay-middle-right { 782 top: 50%; 783} 784.gallery-overlay-bottom-left, 785.gallery-overlay-bottom-center, 786.gallery-overlay-bottom-right { 787 bottom: 5%; 788} 789 790/* Overlay horizontal positions */ 791.gallery-overlay-top-left, 792.gallery-overlay-middle-left, 793.gallery-overlay-bottom-left { 794 left: 5%; 795} 796.gallery-overlay-top-center, 797.gallery-overlay-center, 798.gallery-overlay-bottom-center { 799 left: 50%; 800} 801.gallery-overlay-top-right, 802.gallery-overlay-middle-right, 803.gallery-overlay-bottom-right { 804 right: 5%; 805} 806 807/* Overlay transforms for centering */ 808.gallery-overlay-top-center, 809.gallery-overlay-bottom-center { 810 transform: translateX(-50%); 811} 812.gallery-overlay-middle-left, 813.gallery-overlay-middle-right { 814 transform: translateY(-50%); 815} 816.gallery-overlay-center { 817 transform: translate(-50%, -50%); 818} 819 820/* Responsive font scaling for overlay */ 821@media (max-width: 479px) { 822 .gallery-overlay { 823 font-size: 0.7em; 824 padding: 8px; 825 max-width: 90%; 826 } 827} 828@media (min-width: 480px) and (max-width: 767px) { 829 .gallery-overlay { 830 font-size: 0.85em; 831 padding: 12px; 832 max-width: 85%; 833 } 834} 835@media (min-width: 768px) and (max-width: 1199px) { 836 .gallery-overlay { 837 font-size: 1em; 838 padding: 16px; 839 } 840} 841@media (min-width: 1200px) { 842 .gallery-overlay { 843 font-size: 1.2em; 844 padding: 20px; 845 } 846} 847 848.center_image { 849 display: block; 850 max-width:100%; 851 height:auto; 852 margin: 0 auto; 853} 854 855a.privacyPolicy { text-decoration: none} 856a.privacyPolicy:hover { text-decoration: underline} 857 858.video-container { 859 position:relative; 860 padding-bottom:56.25%; 861 padding-top:30px; 862 height:0; 863 overflow:hidden; 864} 865.video-container iframe, .video-container object, .video-container embed { 866 position:absolute; 867 top:0; 868 left:0; 869 width:100%; 870 height:100%; 871} 872/* add after video-container if video is square */ 873.video-square { 874 padding-bottom: 100% 875} 876 877/* was in sm-core-css.css */ 878/* Mobile first layout SmartMenus Core CSS (it's not recommended editing these rules) 879 You need this once per page no matter how many menu trees or different themes you use. 880-------------------------------------------------------------------------------------------*/ 881 882.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;-webkit-tap-highlight-color:rgba(0,0,0,0);} 883.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right;} 884.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0;} 885.sm ul{display:none;} 886.sm li,.sm a{position:relative; text-align: left} 887.sm a{display:block;} 888.sm a.disabled{cursor:not-allowed;} 889.sm:after{display:block;height:0; /*noinspection CssInvalidPropertyValue*/ 890 font:0/0 serif;clear:both;visibility:hidden;overflow:hidden;} 891.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;} 892/* ----- end ------ */ 893 894@media screen and (max-width:600px) { 895 h1 { 896 font-size: 30px; 897 } 898 899 h2 { 900 font-size: 26px; 901 } 902 903 h3 { 904 font-size: 22px; 905 } 906 907 h4 { 908 font-size: 20px; 909 } 910} 911 912@media screen and (min-width:768px) { 913 a.reviewBtn {width:300px} 914 /* smartmenu hides menu when width expands after menu toggle clicked twice*/ 915 .contentX img.floatleft {float:left;margin-left:0;margin-right:10px;} 916} 917@media screen and (min-width:981px) { 918 .contentX img { 919 margin: 0 0 10px; 920 width: 100%; 921 max-width: 100%; 922 height: auto; 923 } 924 .contentX img[style*="float"], 925 .contentX img.floatleft { 926 width: auto; 927 } 928 .contentX img.autoPost { 929 width: auto; 930 } 931} 932@media screen and (max-width:768px) { 933 .container-fluid{ width:100%; margin:auto; overflow:hidden;} 934 /* full menu */ 935 .header {padding: 6px 15px 6px 15px;} 936 .logoDiv{ 937 text-align:center; padding-top:6px; padding-bottom: 6px; 938 } 939} 940@media screen and (max-width:767px) { 941 .cities-panel ul li{width:28%;} 942 a.reviewBtn div{ 943 max-width: 300px; 944 margin: 0 auto 40px; 945 } 946 .contentX * {margin-right: 0;} 947 .contentX img { 948 margin: 0 -16px 10px; 949 border: none; 950 max-width: calc(100% + 32px); 951 height: auto !important; 952 } 953 .contentX img.autoPost { 954 margin: 0 auto; 955 } 956 .contentX img.floatleft {} 957} 958@media screen and (max-width:768px) { 959 .contentX { 960 text-align:left; 961 } 962 h2 {text-align: center} 963} 964 965@media screen and (max-width:767px) { 966 .contentX * img{ float:none !important; display:block; margin-left:-16px; margin-right:-16px} 967 /* Preserve inline centering for icons inside cards/specials (override the edge-bleed above) */ 968 .contentX .w3-card img, 969 .contentX [data-special-id] img { display:inline; margin-left:0; margin-right:0; max-width:100%; } 970 .contentX img[style*="float:left"], 971 .contentX img[style*="float: left"], 972 .contentX img[style*="float:right"], 973 .contentX img[style*="float: right"], 974 .contentX img.floatleft { 975 margin: 0 -16px 10px; 976 max-width: calc(100% + 32px); 977 width: calc(100% + 32px) !important; 978 height: auto; 979 } 980 /* Edge-to-edge content images on mobile. Content images already get the 981 negative side margins above; only the width was missing for fixed-pixel 982 images (e.g. a centered 400px hero photo), which left side gaps on phones 983 wider than the image. Force them to fill. Desktop is untouched, so low-res 984 photos stay sharp at their native size on large screens. */ 985 .contentX img { 986 max-width: calc(100% + 32px); 987 width: calc(100% + 32px) !important; 988 height: auto !important; 989 } 990 /* ...but never enlarge small / decorative images. These selectors are more 991 specific than the rule above, so they win even though both use !important. */ 992 .contentX img.noBleed, 993 .contentX img[alt="Author's Face"], 994 .contentX img[src*="/faces/"], 995 .contentX img[src*="/bbb/"], 996 .contentX p.BBBImage img, 997 .contentX .w3-card img, 998 .contentX [data-special-id] img { 999 width: auto !important; 1000 max-width: 100% !important; 1001 margin-left: 0; 1002 margin-right: 0; 1003 display: inline; 1004 } 1005 /* ...except a small image that floats on desktop: inline, the text it floated beside 1006 would start on its bottom line, a word or two stranded to its right. Give it a row. */ 1007 .contentX img.noBleed[style*="float:left"], 1008 .contentX img.noBleed[style*="float: left"], 1009 .contentX img.noBleed[style*="float:right"], 1010 .contentX img.noBleed[style*="float: right"], 1011 .contentX img.noBleed.floatleft { 1012 display: block; 1013 margin-left: auto; 1014 margin-right: auto; 1015 } 1016 /* Photos page: each detail photo spans almost the full screen width with a thin 1017 uniform white border (one photo per row). Using width:100% (pinned to the row)
1018 rather than auto also stops the retina @2x swap (retina99.js) from enlarging 1019 them, since the width no longer follows the swapped file's intrinsic size. 1020 Grid thumbnails keep their own cover sizing. */ 1021 .contentX .photo-category-figures figure { 1022 flex: 0 0 100% !important; 1023 max-width: 100% !important; 1024 margin: 10px 0 !important; 1025 } 1026 .contentX img.autoPost { 1027 width: 100% !important; 1028 max-width: 100% !important; 1029 height: auto !important; 1030 margin: 0 auto !important; 1031 } 1032 .contentX .photo-category-card-img img { 1033 width: 100% !important; 1034 height: 100% !important; 1035 max-width: 100% !important; 1036 } 1037 /* A table cannot shrink below the min-content width of its columns, so a wide 1038 one clips at the viewport edge (even with max-width:100%). display:block 1039 lets max-width cap the box and overflow-x scroll the excess sideways. 1040 width:fit-content keeps narrow tables shrink-to-fit (and centered via 1041 margin:auto / align=center) instead of stretching their border full-width. */ 1042 .contentX table { 1043 display: block; 1044 width: fit-content; 1045 max-width: 100% !important; 1046 overflow-x: auto; 1047 } 1048 /* Wide tables stamped by ContentMutate::stampTableCardLabels (class 1049 mobile-cards + data-label per cell) render as stacked cards instead of 1050 scrolling: each body row becomes a card titled by its first cell, and the 1051 other cells show their column header from data-label. Unstamped tables 1052 keep the scroll fallback above; desktop renders the normal table. */ 1053 .contentX table.mobile-cards { 1054 width: 100%; 1055 max-width: 100% !important; 1056 border: none; 1057 overflow: visible; 1058 background: transparent; 1059 } 1060 .contentX .mobile-cards thead, 1061 .contentX .mobile-cards tbody { display: block; width: 100%; } 1062 .contentX .mobile-cards tr { 1063 display: block; 1064 /* Google Docs pastes style="height:0pt" on every row; as a block that 1065 collapses the card and stacks every row's text on top of the next. */ 1066 height: auto !important; 1067 border: 1px solid #d7dbe0; 1068 border-radius: 10px; 1069 margin: 0 0 14px; 1070 padding: 10px 14px; 1071 background: #fff; 1072 box-shadow: 0 2px 6px rgba(0,0,0,.06); 1073 } 1074 .contentX .mobile-cards tr.mobile-cards-hdr { display: none; } 1075 .contentX .mobile-cards td, 1076 .contentX .mobile-cards th { 1077 display: block; 1078 width: 100% !important; 1079 height: auto !important; 1080 border: none !important; 1081 padding: 7px 0; 1082 text-align: left; 1083 } 1084 .contentX .mobile-cards td:first-child, 1085 .contentX .mobile-cards th:first-child { 1086 font-weight: 800; 1087 font-size: 17px; 1088 border-bottom: 1px solid #eef0f2 !important; 1089 padding-bottom: 8px; 1090 margin-bottom: 4px; 1091 } 1092 .contentX .mobile-cards td::before, 1093 .contentX .mobile-cards th::before { 1094 content: attr(data-label); 1095 display: block; 1096 font-weight: 700; 1097 font-size: 12.5px; 1098 letter-spacing: .03em; 1099 text-transform: uppercase; 1100 color: #546575; 1101 margin-bottom: 1px; 1102 } 1103 .contentX .mobile-cards td:first-child::before, 1104 .contentX .mobile-cards th:first-child::before { content: none; } 1105 .logoDiv span{ 1106 font-size:14px; 1107 } 1108 .cities-panel ul li{ float:none; width:90%;} 1109 .usefullinksDiv ul li{width:36%;} 1110 .headingTxt{ 1111 font-size:26px; 1112 } 1113 .getPriceDiv {margin-top:20px} 1114 1115 h1, h2, h3, h4 {text-align: center} 1116 1117} 1118 1119/* menu mobile v desktop*/ 1120@media screen and (max-width:767px) { 1121 .showLargeScreenHeader {display: none} 1122 .smallScreenHeader {display: block;} 1123 .smallScreenMenuPhone { 1124 color: white; 1125 float:right; 1126 padding:5px 10px; 1127 font-size:20px; 1128 font-weight: bold 1129 } 1130 .toggleMenu{display:block;} 1131 .menu{ display:none;} 1132 .menu{ width:98%;} 1133 1134 .smallScreenMenuPhone a, .header_line1_phone a { 1135 border-radius:6px; 1136 border-style: solid; 1137 border-color: rgba(170, 170, 170, .4); 1138 border-width: 1px; 1139 padding: 2px 20px 5px; 1140 } 1141} 1142 1143/* Shrinking header on scroll */ 1144.mainTopSpacer { 1145 transition: height 0.3s ease-out; 1146} 1147 1148/* Gallery text adjustment when header shrinks */ 1149body.header-shrunk .gallery-text-container { 1150 top: 75px; 1151 transition: top 0.3s ease-out; 1152} 1153.gallery-text-container { 1154 transition: top 0.3s ease-out; 1155} 1156 1157/* Desktop: logo scales, wrappers shrink in height, phone stays full size */ 1158@media screen and (min-width:768px) { 1159 .headerLine1Style .header_line1_company { 1160 transition: height 0.3s ease-out; 1161 } 1162 .headerLine1Style .call99-flex-vert-center { 1163 transition: height 0.3s ease-out; 1164 } 1165 .showLargeScreenHeader img { 1166 transition: transform 0.3s ease-out; 1167 transform-origin: left top; 1168 } 1169} 1170 1171/* Mobile: logo scales, row collapses via negative margin */ 1172@media screen and (max-width:767px) { 1173 .headerLine1Style { 1174 transition: margin-bottom 0.3s ease-out; 1175 } 1176 .smallScreenHeader img { 1177 transition: transform 0.3s ease-out; 1178 transform-origin: center top; 1179 } 1180} 1181 1182/* Mobile Call Bar - mobile only */ 1183/* Note: popup lead form positioning is handled in pop.up.lead.form.css */ 1184
1185/* Hide mobile call bar on desktop */ 1186@media screen and (min-width:768px) { 1187 #mobile-call-bar { 1188 display: none; 1189 } 1190} 1191 1192/* sm-blue.css */ 1193.sm-blue { 1194 background: transparent; 1195} 1196.sm-blue a, .sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active { 1197 padding: 10px 14px; 1198 /* make room for the toggle button (sub indicator) */ 1199 /*background: black;*/ 1200 color: white; 1201 font-size: 14px; 1202 font-weight: 500; 1203 line-height: 23px; 1204 text-transform:uppercase; 1205 text-decoration: none; 1206} 1207.sm-blue a:hover { 1208 background-color: #a1d1e8; 1209} 1210.sm-blue a.current { 1211 background: #e80000; 1212 color: white; 1213} 1214.sm-blue a.disabled { 1215 color: #a1d1e8; 1216} 1217.sm-blue a span.sub-arrow { 1218 position: absolute; 1219 top: 48%; 1220 margin-top: -17px; 1221 left: auto; 1222 right: 4px; 1223 width: 34px; 1224 height: 34px; 1225 overflow: hidden; 1226 font: bold 16px/34px monospace !important; 1227 text-align: center; 1228 text-shadow: none; 1229 background: #143621; 1230 border-radius: 4px; text-decoration:none; 1231} 1232.sm-blue a.highlighted span.sub-arrow:before { 1233 display: block; 1234 content: '-'; 1235} 1236.sm-blue > li:first-child > a, .sm-blue > li:first-child > :not(ul) a { 1237} 1238.sm-blue > li:last-child > a, .sm-blue > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul, 1239.sm-blue > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul, 1240.sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul, 1241.sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul, 1242.sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul { 1243} 1244.sm-blue > li:last-child > a.highlighted, .sm-blue > li:last-child > *:not(ul) a.highlighted, 1245.sm-blue > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > *:not(ul) a.highlighted, 1246.sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a.highlighted, 1247.sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a.highlighted, 1248.sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a.highlighted { 1249 border-radius: 0; 1250} 1251.sm-blue ul { 1252 background: white; 1253} 1254.sm-blue ul ul { 1255 background: rgba(102, 102, 102, 0.1); 1256} 1257.sm-blue ul a { 1258 background: transparent; 1259 color: #333333; 1260 font-size: 14px; 1261 text-shadow: none; 1262 border-left: 8px solid transparent; 1263} 1264.sm-blue ul a.current { 1265 color: white; text-decoration:none; 1266} 1267.sm-blue ul a.disabled { 1268 color: #b3b3b3; 1269} 1270.sm-blue ul ul a, 1271.sm-blue ul ul a:hover, 1272.sm-blue ul ul a:focus, 1273.sm-blue ul ul a:active { 1274 border-left: 16px solid transparent; text-decoration:none; 1275} 1276.sm-blue ul ul ul a, 1277.sm-blue ul ul ul a:hover, 1278.sm-blue ul ul ul a:focus, 1279.sm-blue ul ul ul a:active { 1280 border-left: 24px solid transparent; 1281} 1282.sm-blue ul ul ul ul a, 1283.sm-blue ul ul ul ul a:hover, 1284.sm-blue ul ul ul ul a:focus, 1285.sm-blue ul ul ul ul a:active { 1286 border-left: 32px solid transparent; 1287} 1288.sm-blue ul ul ul ul ul a, 1289.sm-blue ul ul ul ul ul a:hover, 1290.sm-blue ul ul ul ul ul a:focus, 1291.sm-blue ul ul ul ul ul a:active { 1292 border-left: 40px solid transparent; 1293} 1294.sm-blue ul li { 1295 border-top: 1px solid rgba(0, 0, 0, 0.05); 1296 min-width: 240px; 1297} 1298.sm-blue ul li:first-child { 1299 border-top: 0; 1300} 1301.sm-blue ul li:hover { 1302 background-color: transparent; 1303} 1304
1305/* menu mobile v desktop*/ 1306@media screen and (min-width: 768px) { 1307 1308 /* why? */ 1309 /*.menu {display: inherit !important;}*/ 1310 1311 /* Switch to ipad / desktop layout 1312 ----------------------------------------------- 1313 These transform the menu tree from 1314 collapsible to desktop (navbar + dropdowns) 1315 -----------------------------------------------*/ 1316 /* start... (it's not recommended editing these rules) */ 1317 .sm-blue ul { 1318 position: absolute; 1319 } 1320 1321 .sm-blue li { 1322 display: inline-block; 1323 } 1324 1325 .sm-blue.sm-rtl li { 1326 float: right; 1327 } 1328 1329 .sm-blue ul li, .sm-blue.sm-rtl ul li, .sm-blue.sm-vertical li { 1330 float: none; 1331 } 1332 1333 .sm-blue a { 1334 white-space: nowrap; 1335 } 1336 1337 .sm-blue ul a, .sm-blue.sm-vertical a { 1338 white-space: normal; 1339 } 1340 1341 .sm-blue .sm-nowrap > li > a, .sm-blue .sm-nowrap > li > :not(ul) a { 1342 white-space: nowrap; 1343 } 1344 1345 /* ...end */ 1346 .sm-blue { 1347 } 1348 .sm-blue a, .sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active, .sm-blue a.highlighted { 1349 padding: 10px 22px; 1350 } 1351 .sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active, .sm-blue a.highlighted { 1352 background: #2c91c3; 1353 } 1354 .sm-blue a.current { 1355 /*background: #333;*/ 1356 /*color: white;*/ 1357 } 1358 .sm-blue a.disabled { 1359 /*background: #333;*/ 1360 /*color: #a1d1e8;*/ 1361 } 1362 .sm-blue a span.sub-arrow { 1363 /*top: auto;*/ 1364 margin-top: 0; 1365 bottom: 16px; 1366 left: 90%; 1367 margin-left: -5px; 1368 right: auto; 1369 width: 0; 1370 height: 0; 1371 border-width: 5px; 1372 border-style: solid dashed dashed dashed; 1373 border-color: #d2d3d4 transparent transparent transparent; 1374 background: transparent; 1375 border-radius: 0; 1376 } 1377 .sm-blue a.highlighted span.sub-arrow:before { 1378 display: none; 1379 } 1380 .sm-blue > li:first-child > a, .sm-blue > li:first-child > :not(ul) a { 1381 } 1382 .sm-blue > li { 1383 border-left: 0 solid #2b82ac; 1384 } 1385 .sm-blue > li:first-child { 1386 border-left: 0; 1387 } 1388 .sm-blue ul { 1389 border: 1px solid #a8a8a8; 1390 padding: 7px 0; 1391 background: white; 1392 border-radius: 0 0 4px 4px; 1393 -webkit-box-shadow: 0 5px 12px rgba(0, 0, 0, 0.3); 1394 -moz-box-shadow: 0 5px 12px rgba(0, 0, 0, 0.3); 1395 box-shadow: 0 5px 12px rgba(0, 0, 0, 0.3); 1396 } 1397 .sm-blue ul ul { 1398 background: white; 1399 } 1400 .sm-blue ul a, .sm-blue ul a:hover, .sm-blue ul a:focus, .sm-blue ul a:active, .sm-blue ul a.highlighted { 1401 border: 0 !important; 1402 padding: 9px 18px; 1403 background: transparent; 1404 /*color: #333333;*/ 1405 } 1406 .sm-blue ul a:hover, .sm-blue ul a:focus, .sm-blue ul a:active, .sm-blue ul a.highlighted { 1407 /*background: #333;*/ 1408 /*color: white;*/ 1409 } 1410 .sm-blue ul a.current { 1411 /*background: #333;*/ 1412 /*color: white;*/ 1413 } 1414 .sm-blue ul a.disabled { 1415 /*background: white;*/ 1416 /*color: #333333;*/ 1417 } 1418 .sm-blue ul a span.sub-arrow { 1419 top: 50%; 1420 margin-top: -5px; 1421 bottom: auto; 1422 left: auto; 1423 margin-left: 0; 1424 right: 10px; 1425 border-style: dashed dashed dashed solid; 1426 border-color: transparent transparent transparent #a1d1e8; 1427 } 1428 .sm-blue ul li { 1429 border: 0; 1430 } 1431 .sm-blue span.scroll-up, 1432 .sm-blue span.scroll-down { 1433 position: absolute; 1434 display: none; 1435 visibility: hidden; 1436 overflow: hidden; 1437 background: white; 1438 height: 20px; 1439 } 1440 .sm-blue span.scroll-up-arrow, .sm-blue span.scroll-down-arrow { 1441 position: absolute; 1442 top: -2px; 1443 left: 50%; 1444 margin-left: -8px; 1445 width: 0; 1446 height: 0; 1447 overflow: hidden; 1448 border-width: 8px; 1449 border-style: dashed dashed solid dashed; 1450 border-color: transparent transparent #333333 transparent; 1451 } 1452 .sm-blue span.scroll-down-arrow { 1453 top: 6px; 1454 border-style: solid dashed dashed dashed; 1455 border-color: #333333 transparent transparent transparent; 1456 } 1457 .sm-blue.sm-rtl.sm-vertical a span.sub-arrow { 1458 right: auto; 1459 left: 10px; 1460 border-style: dashed solid dashed dashed; 1461 border-color: transparent #d2d3d4 transparent transparent; 1462 } 1463 .sm-blue.sm-rtl > li:first-child > a, .sm-blue.sm-rtl > li:first-child > :not(ul) a { 1464 border-radius: 0 8px 8px 0; 1465 } 1466 .sm-blue.sm-rtl > li:first-child { 1467 border-left: 1px solid #333333; 1468 } 1469 .sm-blue.sm-rtl > li:last-child { 1470 border-left: 0; 1471 } 1472 .sm-blue.sm-rtl ul a span.sub-arrow { 1473 right: auto; 1474 left: 10px; 1475 border-style: dashed solid dashed dashed; 1476 border-color: transparent #d2d3d4 transparent transparent; 1477 } 1478 .sm-blue.sm-vertical { 1479 -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); 1480 -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); 1481 box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); 1482 } 1483 .sm-blue.sm-vertical a { 1484 padding: 9px 23px; 1485 } 1486 .sm-blue.sm-vertical a span.sub-arrow { 1487 top: 50%; 1488 margin-top: -5px; 1489 bottom: auto; 1490 left: auto; 1491 margin-left: 0; 1492 right: 10px; 1493 border-style: dashed dashed dashed solid; 1494 border-color: transparent transparent transparent #a1d1e8; 1495 } 1496 .sm-blue.sm-vertical > li:first-child > a, .sm-blue.sm-vertical > li:first-child > :not(ul) a { 1497 border-radius: 8px 8px 0 0; 1498 } 1499 .sm-blue.sm-vertical > li:last-child > a, .sm-blue.sm-vertical > li:last-child > :not(ul) a { 1500 border-radius: 0 0 8px 8px; 1501 } 1502 .sm-blue.sm-vertical > li { 1503 border-left: 0 !important; 1504 } 1505 .sm-blue.sm-vertical ul { 1506 border-radius: 4px !important; 1507 } 1508 .sm-blue.sm-vertical ul a { 1509 padding: 9px 23px; 1510 } 1511} 1512 1513/* align tracking telephone number to vertical center of logo */ 1514@media screen and (min-width:768px) { 1515 div.call99-flex-vert-center { 1516 display: flex; 1517 flex-direction: column; 1518 justify-content: center; 1519 text-align: right; 1520 } 1521 div.headerLine1Style { 1522 display: flex; 1523 flex-direction: row; 1524 vertical-align: middle; 1525 justify-content: space-between; 1526 max-width: 980px; 1527 margin: auto; 1528 } 1529} 1530 1531/* ============================================================ 1532 Pro v3 Enhancements â Hero with Integrated Lead Form 1533 ============================================================ */ 1534
1535/* Get a Price section - light background for visual separation */ 1536.padGetPrice { 1537 background-color: #f8f9fa; 1538 padding-top: 40px; 1539 padding-bottom: 20px; 1540} 1541 1542/* Cities panel - subtle top border for section separation */ 1543.cities-panel { 1544 border-top: 1px solid #e9ecef; 1545 padding-top: 30px; 1546} 1547 1548/* ---- Hero v3: override base .center-cropped constraints ---- */ 1549/* The overlay is position:relative and drives the container height. 1550 The image is position:absolute, filling the container as a background. 1551 This ensures the hero auto-sizes to fit the form content at all breakpoints. */ 1552.center-cropped.hero-v3-hero { 1553 position: relative; 1554 max-height: none; 1555 height: auto; 1556 overflow: hidden; 1557} 1558 1559/* Image becomes absolute background, filling the container */ 1560.center-cropped.hero-v3-hero > img.gallery-hero-img { 1561 position: absolute; 1562 top: 0; 1563 left: 0; 1564} 1565 1566/* ---- Hero v3 overlay: split layout with form ---- */ 1567.hero-v3-overlay { 1568 position: relative; 1569 z-index: 15; 1570 display: flex; 1571 align-items: center; 1572 justify-content: center; 1573 background: rgba(0,0,0,0.3); 1574 padding: 30px 3%; 1575 min-height: 420px; 1576} 1577 1578/* Inner container: side-by-side on desktop */ 1579.hero-v3-inner { 1580 display: flex; 1581 align-items: center; 1582 justify-content: space-between; 1583 width: 100%; 1584 max-width: 1100px; 1585 gap: 5%; 1586} 1587 1588/* Left column: branding + badges */ 1589.hero-v3-branding { 1590 flex: 0 1 55%; 1591 color: #fff; 1592 text-align: left; 1593} 1594 1595.hero-v3-headline { 1596 font-size: 36px; 1597 font-weight: 700; 1598 margin: 0 0 8px; 1599 text-shadow: 0 2px 8px rgba(0,0,0,0.5); 1600 line-height: 1.15; 1601 color: inherit; 1602} 1603 1604.hero-v3-subline { 1605 font-size: 25px; 1606 font-weight: 400; 1607 margin: 0 0 18px; 1608 line-height: 1.4; 1609 text-shadow: 0 1px 4px rgba(0,0,0,0.5); 1610 opacity: 0.95; 1611 color: inherit; 1612} 1613
1614/* Google reviews link */ 1615.hero-v3-reviews { 1616 display: inline-flex; 1617 align-items: center; 1618 gap: 6px; 1619 color: #fff; 1620 text-decoration: none; 1621 font-size: 15px; 1622 font-weight: 500; 1623 text-shadow: 0 1px 3px rgba(0,0,0,0.4); 1624 margin-top: 12px; 1625} 1626.hero-v3-reviews:hover { 1627 text-decoration: underline; 1628 color: #fff; 1629} 1630.hero-v3-google-g { 1631 display: inline-flex; 1632 align-items: center; 1633 justify-content: center; 1634 background: #fff; 1635 border-radius: 50%; 1636 width: 28px; 1637 height: 28px; 1638 filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3)); 1639} 1640.hero-v3-stars { 1641 color: #FFC107; 1642 font-size: 16px; 1643 letter-spacing: 1px; 1644} 1645.hero-v3-review-text { 1646 color: inherit; 1647} 1648 1649/* Click-to-call button (Pro v6 glossy red pill style) */ 1650.hero-v6-call-btn { 1651 position: relative; 1652 display: inline-flex; 1653 align-items: center; 1654 gap: 10px; 1655 background: linear-gradient(180deg, #e52222 0%, #cc1212 28%, #a80808 58%, #7a0000 100%); 1656 color: #fff; 1657 font-weight: 700; 1658 font-size: 22px; 1659 letter-spacing: 0.5px; 1660 text-decoration: none; 1661 padding: 0 32px 0 0; 1662 border-radius: 50px; 1663 box-shadow: 0 5px 14px rgba(0,0,0,0.45); 1664 margin-top: 12px; 1665 margin-bottom: 4px; 1666 text-shadow: 0 1px 3px rgba(0,0,0,0.5); 1667 transition: filter 0.2s; 1668 overflow: hidden; 1669} 1670/* Glossy gel shine overlay â sharp bright band */ 1671.hero-v6-call-btn::before { 1672 content: ''; 1673 position: absolute; 1674 top: 0; 1675 left: 0; 1676 right: 0; 1677 height: 50%; 1678 background: linear-gradient(180deg, rgba(255,255,255,0.75) 0%, rgba(255,255,255,0.5) 20%, rgba(255,255,255,0.12) 48%, rgba(255,255,255,0) 100%); 1679 border-radius: 50px 50px 0 0; 1680 pointer-events: none; 1681} 1682.hero-v6-call-btn:hover { 1683 filter: brightness(1.1); 1684 text-decoration: none; 1685 color: #fff; 1686} 1687.hero-v6-call-circle { 1688 position: relative; 1689 z-index: 1; 1690 display: inline-flex; 1691 align-items: center; 1692 justify-content: center; 1693 width: 52px; 1694 height: 52px; 1695 margin: 0; 1696 border-radius: 50%; 1697 background: linear-gradient(180deg, #a81010 0%, #b81818 50%, #cc2222 100%); 1698 border: 1px solid rgba(255,255,255,0.06); 1699 box-shadow: 1700 inset 0 3px 5px rgba(0,0,0,0.28), 1701 inset 0 -2px 4px rgba(255,180,180,0.15); 1702 flex-shrink: 0; 1703} 1704.hero-v6-call-icon { 1705 width: 26px; 1706 height: 26px; 1707} 1708 1709/* "Highly Rated" badge â shown when no GBP link. 1710 Mirrors the Google reviews row layout: white circle with shield 1711 icon on the left, label on the right. */ 1712.hero-v6-highly-rated { 1713 display: inline-flex; 1714 align-items: center; 1715 gap: 10px; 1716 color: #fff; 1717 font-size: 15px; 1718 font-weight: 500; 1719 text-shadow: 0 1px 3px rgba(0,0,0,0.4); 1720 margin-top: 12px; 1721} 1722.hero-v6-highly-rated-circle { 1723 display: inline-flex; 1724 align-items: center; 1725 justify-content: center; 1726 background: #fff; 1727 border-radius: 50%; 1728 width: 28px; 1729 height: 28px; 1730 flex-shrink: 0; 1731 filter: drop-shadow(0 1px 2px rgba(0,0,0,0.3)); 1732} 1733/* Scoped to the circle so it beats the hero's `.center-cropped img` rule 1734 (which would otherwise stretch the shield to fill the circle); margin:0 1735 cancels the global `img{margin-bottom:-5px}` that, under flex centering, 1736 nudged the shield ~2.5px low. */ 1737.hero-v6-highly-rated-circle .hero-v6-shield-img { 1738 width: 30px; 1739 height: 30px; 1740 margin: 2px 0 0 1px; 1741 object-fit: contain; 1742 display: block; 1743} 1744.hero-v6-highly-rated-text { 1745 letter-spacing: 0.3px; 1746} 1747 1748/* Callout strip below hero */ 1749.hero-v3-callouts { 1750 position: relative; 1751 z-index: 15; 1752 display: flex; 1753 align-items: center; 1754 justify-content: center; 1755 padding: 14px 3%; 1756 font-weight: 600; 1757 font-size: 15px; 1758 gap: 60px; 1759 background: #e0dedc; 1760 color: #2965a8; 1761} 1762.hero-v3-callout { 1763 display: inline-flex; 1764 align-items: center; 1765 gap: 8px; 1766} 1767.hero-v3-callout + .hero-v3-callout::before { 1768 content: '|'; 1769 position: absolute; 1770 margin-left: -34px; 1771 color: #aaa; 1772 font-weight: 300; 1773 font-size: 18px; 1774} 1775.hero-v3-callout { 1776 position: relative; 1777} 1778.hero-v3-callout-icon { 1779 flex-shrink: 0; 1780} 1781.hero-v3-callout-icon-check { 1782 color: #64b03f; 1783} 1784 1785/* Customer photos next to reviews */ 1786.hero-v3-customer-photos { 1787 display: inline-flex; 1788 align-items: center; 1789 margin-right: 6px; 1790} 1791.center-cropped .hero-v3-customer-photo { 1792 width: 36px; 1793 height: 36px; 1794 border-radius: 50%; 1795 object-fit: cover; 1796 border: 2px solid #fff; 1797 margin-left: -8px; 1798 box-shadow: 0 1px 3px rgba(0,0,0,0.2); 1799 position: static; 1800} 1801.hero-v3-customer-photo:first-child { 1802 margin-left: 0; 1803} 1804 1805/* Right column: form card */ 1806.hero-v3-form-card { 1807 flex: 0 1 40%; 1808 background: #f1f0f0; 1809 border-radius: 12px; 1810 box-shadow: 0 8px 32px rgba(0,0,0,0.2); 1811 padding: 24px 22px 20px; 1812 color: #333; 1813} 1814 1815.hero-v3-form-header { 1816 font-size: 20px; 1817 font-weight: 700; 1818 margin: 0 0 14px; 1819 color: #000; 1820 text-align: center; 1821} 1822 1823.hero-v3-form-card ul { 1824 padding: 0; 1825 margin: 0; 1826 list-style-type: none; 1827} 1828 1829.hero-v3-form-card ul li { 1830 padding: 4px 0; 1831 margin: 0; 1832 display: block; 1833 font-size: 14px; 1834} 1835 1836.hero-v3-form-card .text-field { 1837 width: 100%; 1838 padding: 11px 12px; 1839 font-size: 14px; 1840 border: 1px solid #d4d4d4; 1841 border-radius: 6px; 1842 color: #333; 1843 background: #fff; 1844 transition: border-color 0.2s; 1845 box-sizing: border-box; 1846} 1847 1848.hero-v3-form-card .text-field:focus { 1849 border-color: #2971b3; 1850 outline: none; 1851} 1852 1853.hero-v3-form-card textarea.text-field { 1854 resize: vertical; 1855} 1856 1857.hero-v3-form-card .check-field { 1858 padding-left: 0; 1859 width: 100% !important; 1860} 1861 1862.hero-v3-form-card .check-field label { 1863 color: #333; 1864} 1865 1866/* Submit button â flat fallback; inline style from html.tpl overrides with site button colors */ 1867.hero-v3-form-card .submit-field { 1868 background: #e82428; 1869 border: none; 1870 padding: 13px 0; 1871 display: inline-block; 1872 cursor: pointer; 1873 color: #fff; 1874 width: 100%; 1875 font-size: 17px; 1876 font-weight: 600; 1877 border-radius: 8px; 1878 box-shadow: 0 2px 8px rgba(0,0,0,0.15); 1879 transition: filter 0.2s, transform 0.1s; 1880} 1881 1882.hero-v3-form-card .submit-field:hover { 1883 filter: brightness(0.9); 1884} 1885 1886.hero-v3-form-card .submit-field:active { 1887 transform: scale(0.98); 1888} 1889 1890/* ---- Tablet (601pxâ992px): stacked, form below headline ---- */ 1891@media screen and (max-width: 992px) { 1892 .hero-v3-inner { 1893 flex-direction: column; 1894 text-align: center; 1895 gap: 16px; 1896 padding: 20px 0; 1897 } 1898 1899 .hero-v3-branding { 1900 flex: none; 1901 width: 100%; 1902 text-align: center; 1903 } 1904 1905 .hero-v3-headline { 1906 font-size: 30px; 1907 } 1908 1909 .hero-v3-subline { 1910 font-size: 15px; 1911 margin-bottom: 10px; 1912 } 1913 1914 .hero-v3-reviews { 1915 justify-content: center; 1916 } 1917 1918 .hero-v6-call-btn { 1919 margin: 8px auto 4px; 1920 } 1921 1922 .hero-v3-form-card { 1923 flex: none; 1924 width: 100%; 1925 max-width: 540px; 1926 } 1927} 1928 1929/* ---- Name+Phone: side-by-side on tablet+desktop, stacked on mobile ---- */ 1930/* Specificity must beat .hero-v3-form-card ul li (0,1,2) */ 1931.hero-v3-form-card li.hero-v3-form-row { 1932 padding: 0; 1933} 1934.hero-v3-form-card .hero-v3-form-row > div { 1935 padding: 4px 0; 1936} 1937@media screen and (min-width: 601px) { 1938 .hero-v3-form-card li.hero-v3-form-row { 1939 display: flex; 1940 gap: 8px; 1941 padding: 4px 0; 1942 } 1943 .hero-v3-form-card .hero-v3-form-row > div { 1944 flex: 1; 1945 padding: 0; 1946 } 1947} 1948 1949/* ---- Mobile (â¤600px): stacked, compact ---- */ 1950@media screen and (max-width: 600px) { 1951 .hero-v3-overlay { 1952 padding: 20px 12px; 1953 } 1954 1955 .hero-v3-inner { 1956 flex-direction: column; 1957 text-align: center; 1958 gap: 12px; 1959 padding: 10px 0; 1960 } 1961 1962 .hero-v3-branding { 1963 text-align: center; 1964 } 1965 1966 .hero-v3-headline { 1967 font-size: 24px; 1968 } 1969 1970 .hero-v3-subline { 1971 font-size: 13px; 1972 margin-bottom: 8px; 1973 } 1974 1975 .hero-v3-reviews { 1976 justify-content: center; 1977 font-size: 13px; 1978 } 1979 1980 /* On mobile, branding becomes a flex column so we can reorder the 1981 call button to appear AFTER the reviews/highly-rated badge, 1982 directly above the lead form (per Melanie's mock-up). */ 1983 .hero-v3-branding { 1984 display: flex; 1985 flex-direction: column; 1986 } 1987 .hero-v6-call-btn { 1988 order: 99; 1989 align-self: center; 1990 margin-top: 14px; 1991 margin-bottom: 0; 1992 } 1993 1994 .hero-v3-callouts { 1995 display: none; 1996 } 1997 1998 .center-cropped .hero-v3-customer-photo { 1999 width: 28px; 2000 height: 28px; 2001 } 2002 2003 .hero-v3-form-card { 2004 flex: none; 2005 width: 100%; 2006 padding: 18px 16px 14px; 2007 } 2008 2009 .hero-v3-form-header { 2010 font-size: 18px; 2011 margin-bottom: 10px; 2012 } 2013} 2014 2015/* ============================================================================= 2016 v6.1 MENU â CSS-first SmartMenus replacement. 2017 Keeps v6's .sm-blue visual language; adds :hover/:focus-within dropdowns 2018 (desktop), max-height drawer + .is-open accordion (mobile), hamburger 2019 morph-to-Ã, and scrim. Caret is a single down-pointing CSS triangle; 2020 nested/mobile variants are just CSS rotations of that triangle. 2021 ============================================================================= */ 2022 2023button.toggleMenu { 2024 display: none; /* â inline-flex on mobile */ 2025 align-items: center; 2026 gap: 10px; 2027 background: none; 2028 border: 0; 2029 margin: 0; 2030 padding: 8px 12px; 2031 min-height: 44px; /* WCAG 2.5.5 AAA tap target */ 2032 border-radius: 6px;
2033 cursor: pointer; 2034 text-align: left; 2035 font: inherit; 2036 font-weight: 500; 2037 letter-spacing: 0.02em; 2038 -webkit-tap-highlight-color: transparent; 2039 transition: background-color 160ms cubic-bezier(.4,0,.2,1), 2040 transform 120ms cubic-bezier(.4,0,.2,1); 2041} 2042button.toggleMenu:hover { background-color: rgba(255,255,255,0.08); } 2043button.toggleMenu:active { transform: scale(0.96); } 2044button.toggleMenu:focus-visible { 2045 outline: 2px solid currentColor; 2046 outline-offset: 2px; 2047} 2048 2049.toggleMenuIcon { 2050 position: relative; 2051 display: inline-block; 2052 width: 22px; 2053 height: 16px; 2054 flex-shrink: 0; 2055} 2056.toggleMenuIcon > span { 2057 position: absolute; 2058 left: 0; 2059 width: 100%; 2060 height: 2px; 2061 background: currentColor; 2062 border-radius: 1px; 2063 transition: transform 220ms cubic-bezier(.4,0,.2,1), 2064 opacity 120ms ease, 2065 top 220ms cubic-bezier(.4,0,.2,1); 2066} 2067.toggleMenuIcon > span:nth-child(1) { top: 2px; } 2068.toggleMenuIcon > span:nth-child(2) { top: 7px; } 2069.toggleMenuIcon > span:nth-child(3) { top: 12px; } 2070 2071/* Open state: rails morph into an à */ 2072button.toggleMenu[aria-expanded="true"] .toggleMenuIcon > span:nth-child(1) { 2073 top: 7px; transform: rotate(45deg); 2074} 2075button.toggleMenu[aria-expanded="true"] .toggleMenuIcon > span:nth-child(2) { 2076 opacity: 0; 2077} 2078button.toggleMenu[aria-expanded="true"] .toggleMenuIcon > span:nth-child(3) { 2079 top: 7px; transform: rotate(-45deg); 2080} 2081 2082/* Caret on .has-sub triggers (replaces SmartMenus' JS-injected sub-arrow). 2083 Base points down; rotated in nested/mobile contexts via transform. */ 2084#main-menu li.has-sub > a::after { 2085 content: ""; 2086 display: inline-block; 2087 width: 0; 2088 height: 0; 2089 margin-left: 8px; 2090 vertical-align: middle; 2091 border: 4px solid transparent; 2092 border-top-color: currentColor; 2093 opacity: 0.75; 2094 transition: transform 180ms ease; 2095} 2096 2097/* ââ DESKTOP (â¥768px): hover/focus-within dropdowns âââââââââââââââââââââââââ */ 2098@media screen and (min-width: 768px) { 2099 #main-menu > li, 2100 #main-menu ul li { position: relative; } 2101 2102 #main-menu li:hover > ul, 2103 #main-menu li:focus-within > ul { display: block; } 2104 2105 /* No-JS baseline: scroll only "flat" dropdowns (no nested fly-out). A panel 2106 that hosts a fly-out must stay overflow:visible here â otherwise 2107 overflow-y:auto promotes overflow-x to auto too, clipping the left:100% 2108 fly-out and trapping it scrolling inside the parent. Long flat menus (e.g. 2109 16-item Services) still scroll: #header is fixed at ~160px; the 220px 2110 offset leaves ~60px bottom margin so the last row clears the viewport. */ 2111 #main-menu ul:not(:has(> li.has-sub)) { 2112 max-height: calc(100vh - 220px); 2113 overflow-y: auto; 2114 overscroll-behavior: contain; 2115 scrollbar-gutter: stable; 2116 } 2117 /* JS present (html.menu-js): scroll fly-out-hosting panels as well â the nav 2118 controller re-anchors each open fly-out as position:fixed so it escapes 2119 this overflow instead of being clipped. Keeps long Learn-style menus 2120 scrollable without sacrificing the fly-out. */ 2121 html.menu-js #main-menu ul { 2122 max-height: calc(100vh - 220px); 2123 overflow-y: auto; 2124 overscroll-behavior: contain; 2125 scrollbar-gutter: stable; 2126 } 2127 #main-menu > li > ul { top: 100%; left: 0; } 2128 /* A fly-out opens flush against the parent's right edge; the inherited 2129 .sm-blue drop shadow would blur back across that seam as a gray band. 2130 The panel's 1px border already separates it, so drop the shadow here. */ 2131 #main-menu ul ul { top: 0; left: 100%; box-shadow: none; } 2132 2133 /* Top-level caret flips to â² when its dropdown is open */ 2134 #main-menu > li.has-sub:hover > a::after, 2135 #main-menu > li.has-sub:focus-within > a::after { 2136 transform: rotate(180deg); 2137 } 2138 /* Nested items: caret points â¶ (floated next to the label) */ 2139 #main-menu ul li.has-sub > a::after { 2140 float: right; 2141 margin: 6px 0 0; 2142 transform: rotate(-90deg); 2143 } 2144 2145 .menu-drawer-scrim { display: none; } 2146} 2147 2148/* ââ MOBILE (<768px): slide-down drawer + accordion submenus ââââââââââââââââ */ 2149@media screen and (max-width: 767px) { 2150 button.toggleMenu { display: inline-flex; } 2151 button.toggleMenu[aria-expanded="true"] { opacity: 0.85; } 2152 2153 /* Drawer panel. .menu.headerMenuStyle has to out-specify v6's 2154 .menu{display:none} at this breakpoint (line ~996). */ 2155 .menu.headerMenuStyle { 2156 display: block; 2157 max-height: 0; 2158 overflow: hidden; 2159 transition: max-height 320ms ease; 2160 } 2161 body[data-menu-drawer="open"] .menu.headerMenuStyle { 2162 max-height: 85vh; 2163 overflow-y: auto; 2164 } 2165 body[data-menu-drawer="open"] { overflow: hidden; } 2166 2167 .menu-drawer-scrim { 2168 position: fixed; 2169 inset: 0; 2170 background: rgba(0,0,0,0.4); 2171 z-index: 998; 2172 } 2173 2174 /* Accordion submenus */ 2175 #main-menu li.has-sub > ul { display: none; } 2176 #main-menu li.has-sub.is-open > ul { display: block; } 2177 2178 /* Caret points â¶ when closed, â¼ when open (rotated back to base) */ 2179 #main-menu li.has-sub > a::after { 2180 float: right; 2181 margin: 10px 4px 0 0; 2182 transform: rotate(-90deg); 2183 } 2184 #main-menu li.has-sub.is-open > a::after { 2185 transform: rotate(0deg); 2186 } 2187} 2188 2189 </style> 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 <style> 2207 #header {
2208 color: #e88c14; 2209 background-color: white; 2210 2211 } 2212 #header .phoneNumber { 2213 color: #e88c14; 2214 text-decoration: none; 2215 2216 } 2217 .headerLine1Style a, .headerLine1Style a h2 { 2218 color: inherit; 2219 } 2220 .headerLine2Style { 2221 background-color: #e88c14; 2222 } 2223 .sm-blue ul, .sm-blue ul a, .sm-blue a, .sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active { 2224 color: white; 2225 background-color: #e88c14; 2226 } 2227 .sm-blue a:hover, .sm-blue a.highlighted { 2228 color: black; 2229 background-color: #e88c14; 2230 } 2231 .sm-blue ul a:hover { 2232 color: black; 2233 background-color: #e88c14; 2234 } 2235 @media screen and (min-width: 768px) { 2236 #main-menu > li.has-sub:hover > a, 2237 #main-menu > li.has-sub:focus-within > a { 2238 background-color: #e88c14; 2239 color: black; 2240 } 2241 #main-menu ul ul { 2242 background-color: #e88c14; 2243 } 2244 } 2245 .toggleMenu { 2246 color: white 2247 } 2248 #header .smallScreenHeader .phoneNumber { 2249 color: white; 2250 text-decoration: none; 2251 } 2252 2253 a, .contentX a.phoneNumber, a.phoneNumber { 2254 color: #e88c14; 2255 } 2256 a:hover { 2257 color: black; 2258 text-decoration: underline; 2259 } 2260 2261 .useboxright, .useboxright a, .useboxright li { 2262 color: white; 2263 background-color: black; 2264 } 2265 a.reviewBtn div {
2266 color: black; 2267 background-color: #e88c14; 2268 2269 } 2270 .getPriceDiv { 2271 color: white; 2272 background-color: black; 2273 } 2274 .submit-field { 2275 color: black; 2276 background-color: #e88c14; 2277 2278 } 2279 .getPriceFormDiv { 2280 background: #f6f7fe; 2281 color: #333; 2282 } 2283 .getPriceFormDiv .check-field label { 2284 color: #333; 2285 } 2286 .footerDivMn { 2287 color: white; 2288 background-color: black; 2289 } 2290 2291 2292 2293 .hero-v3-form-card .submit-field { 2294 background: #e88c14; 2295 color: black; 2296 border-color: #e88c14; 2297 2298 } 2299 .hero-v3-form-card .submit-field:hover { 2300 filter: brightness(0.9); 2301 } 2302 2303 </style> 2304 2305 2306 2307
2307<script type="application/ld+json"> 2308{"@context":"https://www.schema.org","@type":"LocalBusiness","name":"Gary's Plumbing, Inc.","telephone":"+19497796129","url":"https://gary-s-plumbing.com","image":"https://gary-s-plumbing.com/images/layout01/favicon.ico","priceRange":"$$","address":{"@type":"PostalAddress","streetAddress":"3419 Spectrum","addressLocality":"Irvine","addressRegion":"CA","postalCode":"92618","addressCountry":"United States"},"contactPoint":[{"@type":"ContactPoint","telephone":"+19497796129","contactType":"sales"}],"sameAs":["https://search.google.com/local/writereview?placeid=ChIJ715k0ffn3IARIvRckEhcc9g","https://www.bing.com/maps/search?q=Gary%27s+Plumbing%2C+Inc.%2C+Irvine+California","https://local.yahoo.com/info-151864476-moses-plumbing-irvine","https://www.yelp.com/biz/garys-plumbing-irvine","https://www.neustarlocaleze.biz/directory/us/ca/irvine/garys-plumbing-inc/904622062/","https://www.manta.com/c/mkxmbk2/gary-s-plumbing-inc","https://local-listings.data-axle.com/places/4CY6HPSW","https://www.facebook.com/Garys-Plumbing-Inc-112558552701636/","https://www.angieslist.com/companylist/us/ca/irvine/garys-plumbing-reviews-7532120.htm","https://www.houzz.com/hznb/professionals/plumbers/gary-s-plumbing-inc-pfvwus-pf~917674296/__public","https://www.screencast.com/t/64JVnKqcc","https://nextdoor.com/pages/garys-plumbing-irvine-ca/"],"aggregateRating":{"@type":"AggregateRating","ratingValue":"4.8","ratingCount":"4"}} 2309</script>
2309 <style> .cta-call-btn { 2310 background-color: #FFA500; 2311 color: #FFFFFF; 2312 } 2313 .cta-call-btn:hover { 2314 background-color: #FFB733; 2315 color: #FFFFFF; 2316 transform: translateY(-1px); 2317 text-decoration: none; 2318 } 2319 .cta-call-btn.cta-shadow-subtle { 2320 box-shadow: 0 4px 10px rgba(0,0,0,0.2); 2321 } 2322 .cta-call-btn.cta-shadow-subtle:hover { 2323 box-shadow: 0 8px 18px rgba(0,0,0,0.26); 2324 } 2325 .cta-call-btn.cta-shadow-strong { 2326 box-shadow: 0 8px 20px rgba(0,0,0,0.3); 2327 } 2328 .cta-call-btn.cta-shadow-strong:hover { 2329 box-shadow: 0 12px 26px rgba(0,0,0,0.34); 2330 } 2331 .cta-call-btn.cta-shadow-none:hover { 2332 box-shadow: 0 6px 16px rgba(0,0,0,0.18); 2333 } 2334</style> 2335 2336 <style>.specials-1card { border-radius: 50px; } 2337.specials-2card { border-radius: 50px; } 2338.specials-3card { border-radius: 50px; }</style> 2339 </head> 2340 2341<body> 2342<!-- Header Starts Here --> 2343 2344<header class="w3-container pad0"> 2345 2346 <div id="header" class="w3-container pad0 headerStyle"> 2347 2348 <div class="headerLine1Style"> 2349 <a href="/" class="showLargeScreenHeader w3-rest w3-left w3-left-align pad-sides-10 header_line1_company"><h2>Gary's Plumbing, Inc.</h2></a> 2350 <a href="/" class="smallScreenHeader w3-rest w3-center pad-sides-10"><h2>Gary's Plumbing, Inc.</h2></a> 2351 <div class="call99-flex-vert-center"> 2352 <h4 class="showLargeScreenHeader header_line1_phone pad-sides-10"> 2353 <a class="phoneNumber primaryPhone" href="tel:+19497796129">(949) 779-6129</a> 2354 </h4> 2355 </div> 2356 </div> 2357 2358 <div class="w3-container pad0 w3-row headerLine2Style"> 2359 2360 <button type="button" class="toggleMenu headerMenuStyle" id="menuIcn" 2361 aria-label="Menu" aria-expanded="false" aria-controls="main-menu-drawer"> 2362 <span class="toggleMenuIcon" aria-hidden="true"> 2363 <span></span><span></span><span></span> 2364 </span> 2365 <span class="toggleMenuLabel">Menu</span> 2366 </button> 2367 <span class="smallScreenHeader smallScreenMenuPhone headerMenuStyle"> 2368 <p style="font-size: xx-small;position: relative;top: 13px;display: inline;right: -50%;background-color: #e88c14;color: white">Call Now</p> 2369 <a class="phoneNumber primaryPhone" href="tel:+19497796129">(949) 779-6129</a> 2370 </span> 2371 2372 <div class="menu headerMenuStyle w3-clear w3-center" id="main-menu-drawer"> 2373 2374 <nav aria-label="Primary"> 2375 <ul id="main-menu" class="sm sm-blue"> 2376 <li><a href="/">Home</a></li> 2377 <li class="has-sub"><a href="#">Services</a><ul><li><a href="/Plumbing.htm">Plumbing</a></li><li><a href="/Emergency-Plumbing-Service.htm">Emergency Plumbing Service</a></li><li><a href="/RePiping.htm">RePiping</a></li><li><a href="/Slab-Leaks.htm">Slab Leaks</a></li><li><a href="/Leak-Detection-and-Repairs.htm">Leak Detection and Repairs</a></li><li><a href="/Piping.htm">Piping</a></li><li><a href="/Water-Filtration.htm">Water Filtration</a></li><li><a href="/Sewer-Repair.htm">Sewer Repair</a></li><li><a href="/Burst-Pipe.htm">Burst Pipe</a></li><li><a href="/Clogged-Drain.htm">Clogged Drain</a></li><li><a href="/Drain-Cleaning.htm">Drain Cleaning</a></li><li><a href="/Earthquake-Shut-Off-Valve.htm">Earthquake Shut Off Valve</a></li><li><a href="/Plumbing-Camera-Inspection.htm">Plumbing Camera Inspection</a></li><li><a href="/Water-Damage-Restoration.htm">Water Damage Restoration</a></li><li><a href="/Gas-Piping.htm">Gas Piping</a></li><li><a href="/Sewer-Line-Camera-Inspection.htm">Sewer Line Camera Inspection</a></li><li><a href="/Sewer-Line-Cleaning.htm">Sewer Line Cleaning</a></li><li><a href="/Water-Heater.htm">Water Heater</a></li><li><a href="/Furnace-Plumbing.htm">Furnace Plumbing</a></li><li><a href="/Boiler-Installation.htm">Boiler Installation</a></li><li><a href="/Boiler-Repair.htm">Boiler Repair</a></li><li><a href="/Wells-and-Pumps.htm">Wells and Pumps</a></li></ul></li> 2378 <li><a href="/towns.htm">Service Area</a></li> 2379 <li><a href="/testimonials.htm">Reviews</a></li> 2380 <li><a href="/photos.htm">Photos</a></li> 2381 <li><a href="/contact.htm">Contact Us</a></li> 2382 </ul> 2383 </nav> 2384 2385 </div> 2386 2387 </div> 2388 2389 </div> 2390 2391 <div class="menu-drawer-scrim" id="menu-drawer-scrim" hidden></div> 2392 2393</header> 2394 2395
2396<script> 2397(function() { 2398 var btn = document.getElementById('menuIcn'); 2399 var drawer = document.getElementById('main-menu-drawer'); 2400 var scrim = document.getElementById('menu-drawer-scrim'); 2401 if (!btn || !drawer || !scrim) return; 2402 2403 var body = document.body; 2404 var isMobile = function() { return window.innerWidth < 768; }; 2405 var isOpen = function() { return body.getAttribute('data-menu-drawer') === 'open'; }; 2406 2407 function setDrawer(open) { 2408 if (open) body.setAttribute('data-menu-drawer', 'open'); 2409 else body.removeAttribute('data-menu-drawer'); 2410 btn.setAttribute('aria-expanded', open ? 'true' : 'false'); 2411 scrim.hidden = !open; 2412 if (!open) { 2413 // collapse submenus so the drawer reopens clean 2414 drawer.querySelectorAll('.has-sub.is-open').forEach(function(li) { 2415 li.classList.remove('is-open'); 2416 }); 2417 } 2418 } 2419 2420 btn.addEventListener('click', function(e) { e.preventDefault(); setDrawer(!isOpen()); }); 2421 scrim.addEventListener('click', function() { setDrawer(false); }); 2422 2423 document.addEventListener('keydown', function(e) { 2424 if (e.key === 'Escape' && isOpen()) { setDrawer(false); btn.focus(); } 2425 }); 2426 2427 // Mobile-only: tap a has-sub trigger (href="#") â toggle accordion 2428 drawer.addEventListener('click', function(e) { 2429 var link = e.target.closest('a'); 2430 if (!link || !isMobile()) return; 2431 var parent = link.parentElement; 2432 if (!parent || !parent.classList.contains('has-sub')) return; 2433 var href = link.getAttribute('href'); 2434 if (href && href !== '#') return; 2435 e.preventDefault(); 2436 parent.classList.toggle('is-open'); 2437 }); 2438 2439 // Cross the breakpoint while open â close cleanly 2440 var resizeTimer; 2441 window.addEventListener('resize', function() { 2442 clearTimeout(resizeTimer); 2443 resizeTimer = setTimeout(function() { 2444 if (!isMobile() && isOpen()) setDrawer(false); 2445 clearAllFlyouts(); // drop stale fixed-position styles; next hover re-places 2446 }, 100); 2447 }); 2448 2449 // Desktop keyboard nav across top-level items 2450 var topItems = drawer.querySelectorAll('#main-menu > li > a'); 2451 topItems.forEach(function(a, idx) { 2452 a.addEventListener('keydown', function(e) { 2453 if (isMobile()) return; 2454 var n = topItems.length, target; 2455 if (e.key === 'ArrowRight') target = (idx + 1) % n; 2456 else if (e.key === 'ArrowLeft') target = (idx - 1 + n) % n; 2457 else if (e.key === 'Home') target = 0; 2458 else if (e.key === 'End') target = n - 1; 2459 else return; 2460 e.preventDefault(); 2461 topItems[target].focus(); 2462 }); 2463 }); 2464 2465 // ââ Desktop fly-out escape ââââââââââââââââââââââââââââââââââââââââââââââââ 2466 // With html.menu-js, fly-out-hosting panels scroll vertically (CSS), which 2467 // would clip a nested fly-out. Re-anchor each open fly-out as position:fixed 2468 // (escapes ancestor overflow) and keep it aligned to its trigger row. JS and 2469 // the scroll-enabling CSS are coupled via the menu-js flag so the no-JS 2470 // baseline never clips. 2471 function flyoutOf(li) { return li.querySelector(':scope > ul'); } 2472 2473 function placeFlyout(li) { 2474 var ul = flyoutOf(li); 2475 if (!ul) return; 2476 ul.style.position = 'fixed'; 2477 ul.style.left = '0px'; 2478 ul.style.top = '0px'; 2479 // Fixed positioning makes the viewport the containing block, so the panel 2480 // would shrink-to-fit to max-content and lay its inline-block items out as 2481 // a horizontal strip. Pin to min-content to keep it a single column. 2482 ul.style.width = 'min-content'; 2483 var row = li.getBoundingClientRect(); 2484 var w = ul.offsetWidth, h = ul.offsetHeight; 2485 // open to the right of the row; flip to the left if there's no room 2486 var left = row.right; 2487 if (left + w > window.innerWidth - 4) left = Math.max(4, row.left - w); 2488 // align tops, but clamp so a tall fly-out stays within the viewport 2489 var top = Math.min(row.top, Math.max(8, window.innerHeight - 8 - h)); 2490 ul.style.left = left + 'px'; 2491 ul.style.top = top + 'px'; 2492 } 2493 2494 function clearFlyout(li) { 2495 var ul = flyoutOf(li); 2496 if (!ul) return; 2497 ul.style.position = ul.style.left = ul.style.top = ul.style.width = ''; 2498 } 2499 2500 function clearAllFlyouts() { 2501 drawer.querySelectorAll('#main-menu ul li.has-sub').forEach(clearFlyout); 2502 } 2503 2504 drawer.querySelectorAll('#main-menu ul li.has-sub').forEach(function(li) { 2505 li.addEventListener('mouseenter', function() { if (!isMobile()) placeFlyout(li); }); 2506 li.addEventListener('mouseleave', function() { if (!isMobile()) clearFlyout(li); }); 2507 li.addEventListener('focusin', function() { if (!isMobile()) placeFlyout(li); }); 2508 li.addEventListener('focusout', function(e) { 2509 if (!isMobile() && !li.contains(e.relatedTarget)) clearFlyout(li); 2510 }); 2511 }); 2512 2513 // Keep an open fly-out aligned as its scroll-parent (or the window) scrolls. 2514 // Capture phase catches non-bubbling scroll on the inner panels too. 2515 window.addEventListener('scroll', function() { 2516 if (isMobile()) return; 2517 drawer.querySelectorAll('#main-menu ul li.has-sub').forEach(function(li) { 2518 if (li.matches(':hover') || li.contains(document.activeElement)) placeFlyout(li); 2519 }); 2520 }, true); 2521 2522 document.documentElement.classList.add('menu-js'); 2523})(); 2524</script>
2524 2525 2526 2527<!-- Header Ends here --> 2528 2529 2530<!-- page content starts here --> 2531 2532<main class="w3-container pad0 w3-center"> 2533 2534 <div class="w3-container pad0 showLargeScreenHeader mainTopSpacer"></div> 2535 2536 <div class="w3-container pad0 smallScreenHeader"> 2537 <div class="w3-container pad0 mainTopSpacer"></div> 2538 </div> 2539 2540
2540<script> 2541 function setMainTopSpacer() { 2542 var headerHeight = document.getElementById('header').offsetHeight; 2543 var elements = document.getElementsByClassName('mainTopSpacer'); 2544 for (var i = 0, len = elements.length; i < len; i++) { 2545 elements[i].style.height = headerHeight+"px"; 2546 } 2547 } 2548 setMainTopSpacer(); 2549 2550 (function() { 2551 'use strict'; 2552 2553 var header = document.getElementById('header'); 2554 var SHRINK_THRESHOLD = 50; 2555 var isShrunk = false; 2556 var ticking = false; 2557 var MOBILE_SCALE = 0.5; 2558 var DESKTOP_SCALE = 0.7; 2559 2560 function getVisibleLogo() { 2561 if (window.innerWidth >= 768) { 2562 return header.querySelector('.showLargeScreenHeader img'); 2563 } 2564 return header.querySelector('.smallScreenHeader img'); 2565 } 2566 2567 var isDesktop = window.innerWidth >= 768; 2568 var scale = isDesktop ? DESKTOP_SCALE : MOBILE_SCALE; 2569 var logoImg = getVisibleLogo(); 2570 if (!logoImg) return; 2571 2572 var headerLine1 = header.querySelector('.headerLine1Style'); 2573 // Desktop: get logo wrapper and phone container for independent height control 2574 var logoWrapper = isDesktop ? (logoImg.closest('a') || logoImg.parentElement) : null; 2575 var phoneContainer = isDesktop ? headerLine1.querySelector('.call99-flex-vert-center') : null; 2576 var expandedLine1Width = headerLine1 ? headerLine1.offsetWidth : 0; 2577 var expandedHeight = header.offsetHeight; 2578 var expandedLogoWrapperH = logoWrapper ? logoWrapper.offsetHeight : 0; 2579 var expandedPhoneH = phoneContainer ? phoneContainer.offsetHeight : 0; 2580 // Mobile: margin collapse on headerLine1 2581 var expandedLine1H = headerLine1 ? headerLine1.offsetHeight : 0; 2582 var mobileShrinkMargin = Math.round(expandedLine1H * (1 - MOBILE_SCALE)); 2583 var shrunkHeight; 2584 2585 // Desktop shrunk heights: scale both containers so flex row actually shrinks 2586 var shrunkLogoWrapperH = Math.round(expandedLogoWrapperH * DESKTOP_SCALE); 2587 var shrunkPhoneH = Math.round(expandedPhoneH * DESKTOP_SCALE); 2588 2589 function applyDesktopShrink() { 2590 logoImg.style.transform = 'scale(' + DESKTOP_SCALE + ')'; 2591 logoWrapper.style.height = shrunkLogoWrapperH + 'px'; 2592 logoWrapper.style.overflow = 'hidden'; 2593 if (phoneContainer) { 2594 phoneContainer.style.height = shrunkPhoneH + 'px'; 2595 phoneContainer.style.overflow = 'hidden'; 2596 } 2597 } 2598 2599 function clearDesktopShrink() { 2600 logoImg.style.transform = ''; 2601 logoWrapper.style.height = expandedLogoWrapperH + 'px'; 2602 logoWrapper.style.overflow = ''; 2603 if (phoneContainer) { 2604 phoneContainer.style.height = expandedPhoneH + 'px'; 2605 phoneContainer.style.overflow = ''; 2606 } 2607 } 2608 2609 function applyMobileShrink() { 2610 logoImg.style.transform = 'scale(' + MOBILE_SCALE + ')'; 2611 headerLine1.style.marginBottom = '-' + mobileShrinkMargin + 'px'; 2612 } 2613 2614 function clearMobileShrink() { 2615 logoImg.style.transform = ''; 2616 headerLine1.style.marginBottom = ''; 2617 } 2618 2619 // Measure shrunk height without transitions 2620 function disableTransitions() { 2621 header.style.transition = 'none'; 2622 if (headerLine1) headerLine1.style.transition = 'none'; 2623 if (logoWrapper) logoWrapper.style.transition = 'none'; 2624 if (phoneContainer) phoneContainer.style.transition = 'none'; 2625 } 2626 function enableTransitions() { 2627 header.style.transition = ''; 2628 if (headerLine1) headerLine1.style.transition = ''; 2629 if (logoWrapper) logoWrapper.style.transition = ''; 2630 if (phoneContainer) phoneContainer.style.transition = ''; 2631 } 2632 2633 disableTransitions(); 2634 header.classList.add('header-shrunk'); 2635 if (isDesktop) { applyDesktopShrink(); } else { applyMobileShrink(); } 2636 shrunkHeight = header.offsetHeight; 2637 if (isDesktop) { clearDesktopShrink(); } else { clearMobileShrink(); } 2638 header.classList.remove('header-shrunk'); 2639 void header.offsetHeight; 2640 enableTransitions(); 2641 2642 // Set explicit expanded heights so CSS can transition between px values (autoâpx doesn't animate) 2643 if (isDesktop) { 2644 logoWrapper.style.height = expandedLogoWrapperH + 'px'; 2645 if (phoneContainer) phoneContainer.style.height = expandedPhoneH + 'px'; 2646 } 2647 2648 function setSpacerHeight(height) { 2649 var elements = document.getElementsByClassName('mainTopSpacer'); 2650 for (var i = 0, len = elements.length; i < len; i++) { 2651 elements[i].style.height = height + 'px'; 2652 } 2653 } 2654 2655 function updateHeader() { 2656 var scrollY = window.scrollY || window.pageYOffset; 2657 var shouldShrink = scrollY > SHRINK_THRESHOLD; 2658 2659 if (shouldShrink !== isShrunk) { 2660 isShrunk = shouldShrink; 2661 if (shouldShrink) { 2662 header.classList.add('header-shrunk'); 2663 document.body.classList.add('header-shrunk'); 2664 if (isDesktop) { applyDesktopShrink(); } else { applyMobileShrink(); } 2665 setSpacerHeight(shrunkHeight); 2666 } else { 2667 header.classList.remove('header-shrunk'); 2668 document.body.classList.remove('header-shrunk'); 2669 if (isDesktop) { clearDesktopShrink(); } else { clearMobileShrink(); } 2670 setSpacerHeight(expandedHeight); 2671 } 2672 } 2673 ticking = false;
2674 } 2675 2676 window.addEventListener('scroll', function() { 2677 if (!ticking) { 2678 requestAnimationFrame(updateHeader); 2679 ticking = true; 2680 } 2681 }, { passive: true }); 2682 2683 window.addEventListener('resize', function() { 2684 var wasDesktop = isDesktop; 2685 isDesktop = window.innerWidth >= 768; 2686 logoImg = getVisibleLogo(); 2687 if (!logoImg) return; 2688 2689 disableTransitions(); 2690 2691 // Clear previous state 2692 header.classList.remove('header-shrunk'); 2693 document.body.classList.remove('header-shrunk'); 2694 if (wasDesktop && logoWrapper) { 2695 logoWrapper.style.height = ''; 2696 if (phoneContainer) phoneContainer.style.height = ''; 2697 clearDesktopShrink(); 2698 } else { clearMobileShrink(); } 2699 2700 // Re-acquire elements if viewport crossed breakpoint 2701 logoWrapper = isDesktop ? (logoImg.closest('a') || logoImg.parentElement) : null; 2702 phoneContainer = isDesktop ? headerLine1.querySelector('.call99-flex-vert-center') : null; 2703 2704 // Re-measure expanded (heights must be auto for accurate measurement) 2705 expandedHeight = header.offsetHeight; 2706 expandedLogoWrapperH = logoWrapper ? logoWrapper.offsetHeight : 0; 2707 expandedPhoneH = phoneContainer ? phoneContainer.offsetHeight : 0; 2708 expandedLine1H = headerLine1 ? headerLine1.offsetHeight : 0; 2709 mobileShrinkMargin = Math.round(expandedLine1H * (1 - MOBILE_SCALE)); 2710 shrunkLogoWrapperH = Math.round(expandedLogoWrapperH * DESKTOP_SCALE); 2711 shrunkPhoneH = Math.round(expandedPhoneH * DESKTOP_SCALE); 2712 2713 // Measure shrunk 2714 header.classList.add('header-shrunk'); 2715 if (isDesktop) { applyDesktopShrink(); } else { applyMobileShrink(); } 2716 shrunkHeight = header.offsetHeight; 2717 2718 if (!isShrunk) { 2719 header.classList.remove('header-shrunk'); 2720 if (isDesktop) { clearDesktopShrink(); } else { clearMobileShrink(); } 2721 } else { 2722 document.body.classList.add('header-shrunk'); 2723 } 2724 // Set explicit expanded heights for smooth transitions 2725 if (isDesktop) { 2726 if (logoWrapper) logoWrapper.style.height = (isShrunk ? shrunkLogoWrapperH : expandedLogoWrapperH) + 'px'; 2727 if (phoneContainer) phoneContainer.style.height = (isShrunk ? shrunkPhoneH : expandedPhoneH) + 'px'; 2728 } 2729 void header.offsetHeight; 2730 enableTransitions(); 2731 setSpacerHeight(isShrunk ? shrunkHeight : expandedHeight); 2732 }); 2733 })(); 2734 </script>
2734 2735 2736 2737 <div id="content" class="w3-container pad0 w3-clear contactPage"> 2738 2739 <div class="w3-container w3-content contentX"> 2740 <div style="max-width: 600px; margin: 0 auto"> 2741 <h1>Contact <span itemprop="name">Gary's Plumbing, Inc.</span></h1> 2742 2743 <p> </p> 2744 2745 <p><strong>Office:</strong></p> 2746 2747 <div itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress"> 2748 <div> 2749 <p style="font-weight: normal; margin-left: 40px; ">Gary Alberici<br /> 2750 Gary's Plumbing, Inc.<br /> 2751 <span itemprop="streetAddress">3419 Spectrum</span><br /> 2752 <span itemprop="addressLocality">Irvine</span>, <span itemprop="addressRegion">CA</span> <span itemprop="postalCode">92618</span></p> 2753 </div> 2754 </div> 2755 2756 <p style="font-weight:bold">Phone:</p> 2757 2758 <p style="font-weight: normal; margin-left: 40px; ">(949) 779-6129<br><br></p></p> 2759 2760 <p style="font-weight:bold">Hours:</p> 2761 2762 <p style="margin-left: 40px; "><table class="bizHours" style="margin: 20px 20px 20px 40px;"><tr><td>Monday</td><td>7:00 am - 7:00 pm</td></tr><tr><td>Tuesday</td><td>7:00 am - 7:00 pm</td></tr><tr><td>Wednesday</td><td>7:00 am - 7:00 pm</td></tr><tr><td>Thursday</td><td>7:00 am - 7:00 pm</td></tr><tr><td>Friday</td><td>7:00 am - 7:00 pm</td></tr><tr><td>Saturday </td><td>7:00 am - 7:00 pm</td></tr><tr><td>Sunday</td><td>7:00 am - 7:00 pm</td></tr></table></p> 2763 2764 <p style="font-weight:bold">Email:</p> 2765 2766 <p style="font-weight: normal; margin-left: 40px; ">Available upon request.</p> 2767 </div> 2768 </div> 2769 2770 </div> 2771 2772 <div id="get_a_price" class="w3-container pad0 padGetPrice"> 2773 <div id="right_block" class="w3-container w3-content"> 2774 <div class="getPriceDiv"> 2775 <span id="getPriceHeader">Get a Price</span> 2776 <div class="getPriceFormDiv"> 2777 <form id="demo-form" name="contactForm" action="/webservice/processForm.php" method="post"> 2778 <input type="hidden" name="domainId" id="domainId" value="5685"/> 2779 <input type="hidden" id="hdnThankYouUrl" value=""/> 2780 <ul> 2781 <li><input name="senderName" id="senderName" type="text" class="text-field" placeholder="Name" required="required" maxlength="40"/></li> 2782<li><input name="senderEmail" id="senderEmail" type="email" class="text-field" placeholder="Email" required="required"/></li> 2783<li><input name="senderPhone" id="senderPhone" class="text-field validatePhone" placeholder="Phone Number" required="required" maxlength="20"/></li> 2784<li><textarea name="message" id="message" class="text-field" rows="5" cols="5" placeholder="Enter Your Message" required="required"></textarea></li> <li> 2785 <div class="check-field" style="width: 92%; box-sizing: border-box;"> 2786 <input type="checkbox" name="optInService" id="optInService" value="1" tabindex="9" accesskey="i" title="Check to opt in" /> 2787 <label for="optInService">Text Me!</label> 2788 <div style="font-size: 12px; margin-top: 2px; line-height: 1.4;">I agree to receive service-related text messages from Gary's Plumbing, Inc. (appointment reminders, service updates, missed call follow-ups).</div> 2789 <input type="hidden" name="optInServiceText" value="I agree to receive service-related text messages from Gary's Plumbing, Inc. (appointment reminders, service updates, missed call follow-ups)." /> 2790 </div> 2791 </li> 2792 <li> 2793 <div class="check-field" style="width: 92%; box-sizing: border-box;"> 2794 <input type="checkbox" name="optInMarketing" id="optInMarketing" value="1" tabindex="9" title="Check to opt in to marketing messages" /> 2795 <label for="optInMarketing">Opt-In</label> 2796 <div style="font-size: 12px; margin-top: 2px; line-height: 1.4;">I agree to receive promotional offers and marketing text messages from Gary's Plumbing, Inc..</div> 2797 </div> 2798 </li> 2799 <li> 2800 <div style="width: 92%; box-sizing: border-box; padding-left: 24px; text-align: left; font-size: 11px; color: #333; line-height: 1.4;">Msg frequency varies. Msg & data rates may apply. Reply STOP to opt out or HELP for help. By checking above, you agree to our <a href="/privacy-policy.htm" target="_blank" style="color: #0066cc;">Privacy Policy</a> and <a href="/terms-conditions.htm" target="_blank" style="color: #0066cc;">Terms & Conditions</a>.</div> 2801 </li> 2802 <li><button class="g-recaptcha submit-field" data-sitekey="6LfVQZwhAAAAALN3wyVxWvmdFsX4R3Yh64Un7v2D" data-callback='onRecaptchaSubmit' data-action='submit' tabindex="10" accesskey="u" title="Submit form">Submit</button></li> 2803 <li><input type="text" name="senderZip" id="senderZip" required="required" style="display:none" placeholder="Enter your zip code" maxlength="10" value="
28030" /></li> 2804 2805 </ul> 2806 </form> 2807 </div> 2808 </div> 2809 2810 <div class="greyblocks greyblocks-box"> 2811 <h3>Credit Cards Accepted</h3> 2812 <div class="greyblock-col-1"> 2813 <img src="https://www.paypalobjects.com/webstatic/mktg/logo/AM_mc_vs_dc_ae.jpg" width="319" height="110" style="border:none" alt="PayPal Acceptance Mark" > 2814 </div> 2815 </div> 2816 2817 <div class="greyblocks greyblocks-box"> 2818 <h3>Social Media</h3> 2819 <div class="greyblock-col-1 followus"> 2820 <a href="https://www.facebook.com/Garys-Plumbing-Inc-112558552701636/" target="_blank" title="Facebook"><img alt="Facebook" src="/images/social/facebook_logo_43x43.png" width="43" height="43" /></a><a href="https://search.google.com/local/writereview?placeid=ChIJ715k0ffn3IARIvRckEhcc9g" target="_blank" title="Google"><img alt="Google" src="/images/social/google_icon_43x43.png" width="43" height="43" /></a><a href="https://www.yelp.com/biz/garys-plumbing-irvine" target="_blank" title="Yelp"><img alt="Yelp" src="/images/social/yelp43x43.png" width="43" height="43" /></a><a href="https://www.houzz.com/hznb/professionals/plumbers/gary-s-plumbing-inc-pfvwus-pf~917674296/__public" target="_blank" title="Houzz"><img alt="Houzz" src="/images/social/houzz_43x43.png" width="43" height="43" /></a><a href="https://nextdoor.com/pages/garys-plumbing-irvine-ca/" target="_blank" title="Nextdoor"><img alt="Nextdoor" src="/images/social/nextdoor_43x43.png" width="43" height="43" loading="lazy"/></a> </div> 2821 </div> 2822 2823 </div> 2824 </div> 2825 2826 2827 2828</main> 2829 2830<!-- page content ends here --> 2831 2832<!-- footer starts here --> 2833 2834<footer class="w3-container pad0"> 2835 <div class="w3-container pad0"> 2836 2837 2838 <div class="w3-container pad0"> 2839 <div class="useboxright"> 2840 Gary's Plumbing, Inc.<br> 2841 3419 Spectrum, Irvine, CA 92618 2842 <div class="callNoDiv"> 2843 <ul class="phoneList"> 2844 <li class="primaryPhone"><a class="phoneNumber primaryPhone" href="tel:+19497796129">(949) 779-6129</a></li> 2845 </ul> 2846 </div> 2847 2848 <p><a class="privacyPolicy" href="/privacy-policy.htm">Privacy Policy</a> | <a class="termsConditions" href="/terms-conditions.htm">Terms & Conditions</a></p> 2849 2850 </div> 2851 </div> 2852 </div> 2853 2854 <div class="w3-container pad0 footerDivMn">Copyright © 2026 - 99 Calls</div> <p style="font-size:10px;color:#888;text-align:center;margin:8px 0 0;line-height:1.4">This site is protected by reCAPTCHA and the Google <a href="https://policies.google.com/privacy" target="_blank" rel="noopener" style="color:#666">Privacy Policy</a> and <a href="https://policies.google.com/terms" target="_blank" rel="noopener" style="color:#666">Terms of Service</a> apply.</p> 2855 </footer> 2856 2857<!-- footer ends here --> 2858 2859<!-- Menu Styles -->
2860<script src="/js/jquery-3.7.1.min.js"></script>
2860 2861 2862 2863
2864<script> 2865 var leadFormPopUpRedirectUrl = null; 2866 2867 $(document).ready(function () { 2868 $(window).resize(function () { 2869 setMainTopSpacer(); 2870 // ipad (others?) slow to redraw screen on orientation change 2871 setTimeout(setMainTopSpacer, 500); 2872 }); 2873 }); 2874</script>
2874 2875 2876 2877
2878<script src="/js/jquery.mask.min.js" defer></script>
2878 2879 2880<div id="overlay-back"></div> 2881<link rel="preload" href="/templates/contactForm.css" as="style" onload="this.onload=null;this.rel='stylesheet'"> 2882<noscript> 2883 <link rel="stylesheet" href="/templates/contactForm.css"> 2884</noscript> 2885<div> 2886 <style>.statusMessage { 2887 height: 6em; 2888 }</style> 2889</div> 2890 2891<div id="sendingMessage" class="statusMessage"><p>Sending your message. Please wait...</p></div> 2892<div id="failureMessage" class="statusMessage"><p>There was a problem sending your message. Please try again or call 2893 us.</p></div> 2894<div id="incompleteMessage" class="statusMessage"><p>Please complete all the fields in the form before sending.</p> 2895</div> 2896<div id="limitMessage" class="statusMessage"><p>You may only send 3 messages per day, but you are welcome to call 2897 us!</p></div> 2898<div id="invalid_phone" class="statusMessage"><p>The phone number is invalid. Please check your phone number and try 2899 again.</p></div> 2900<div id="invalid_email" class="statusMessage"><p>The email address is invalid. Please check your email address and try 2901 again.</p></div> 2902 <div id="successMessage" class="statusMessage"><p>Thanks for contacting us! We'll get back to you shortly.</p></div> 2903 2904 2905 2906
2906<script> 2907 let messageDelay = 3000; // How long to display status messages (in milliseconds) 2908 2909 // Init the form once the document is ready 2910 $(init); 2911 2912 // Initialize the form 2913 function init() { 2914 $("[name='contactForm']").submit(submitForm); 2915 $(".validatePhone").mask('(000) 000-0000'); 2916 } 2917 2918 // reCAPTCHA v3 2919 function onRecaptchaSubmit(token) { 2920 // token does not need to be processed 2921 if (!validateForm()) return false; 2922 let recaptchaForm = document.getElementById("demo-form"); 2923 // the form *magickly* includes the token 2924 submitForm.apply(recaptchaForm); 2925 } 2926 function onRecaptchaLandingSubmit(token) { 2927 // token does not need to be processed 2928 let recaptchaForm = document.getElementById("landing-form"); 2929 // the form *magickly* includes the token 2930 submitForm.apply(recaptchaForm); 2931 } 2932 2933 // Submit the form via Ajax 2934 function submitForm() { 2935 var contactForm = $(this); 2936 2937 // Are all the fields filled in? 2938 $('#overlay-back').fadeIn(200); 2939 $('#page').fadeTo('fast', .2); 2940 2941 if (!contactForm.find("[name='senderName']").val() || !contactForm.find("[name='senderEmail']").val() || !contactForm.find("[name='message']").val()) { 2942 2943 // No; display a warning message and return to the form 2944 $('#incompleteMessage').fadeIn().delay(messageDelay).fadeOut(); 2945 $('#overlay-back').delay(messageDelay + 500).fadeOut(200); 2946 $('#page').delay(messageDelay + 500).fadeTo('fast', 1); 2947 2948 2949 } else { 2950 2951 // Yes; submit the form to the PHP script via Ajax 2952 $('#sendingMessage').fadeIn(); 2953 2954 $.ajax({
2955 url: contactForm.attr('action') + "?ajax=true", 2956 type: contactForm.attr('method'), 2957 data: contactForm.serialize(), 2958 timeout: 30000, 2959 success: submitFinished, 2960 error: function (x, t, m) { 2961 if (t === "timeout") { 2962 submitFinished(t); 2963 } else if (t === "invalid_email") { 2964 submitFinished(t); 2965 } else if (t === "invalid_phone") { 2966 submitFinished(t); 2967 } 2968 } 2969 }); 2970 } 2971 2972 // Prevent the default form submission occurring 2973 return false; 2974 } 2975 2976 // Handle the Ajax response 2977 function submitFinished(response) { 2978 response = $.trim(response); 2979 $('#sendingMessage').fadeOut(); 2980 2981 if (response == "success") { 2982 2983 // Form submitted successfully: 2984 // 1. Display the success message 2985 // 2. Clear the form fields 2986 // 3. Fade the content back in 2987 2988 $('#successMessage').fadeIn().delay(messageDelay).fadeOut(); 2989 var leadName = $("[name='senderName']").val(); 2990 var leadEmail = $("[name='senderEmail']").val(); 2991 var leadPhone = $("[name='senderPhone']").val(); 2992 $("[name='senderName']").val(""); 2993 $("[name='senderEmail']").val(""); 2994 $("[name='senderPhone']").val(""); 2995 $("[name='message']").val(""); 2996 2997 if (leadFormPopUpRedirectUrl) { 2998 // client has supplied url to send customer after form is accepted 2999 var params = new URLSearchParams(); 3000 if (leadName) params.set('full_name', leadName); 3001 if (leadEmail) params.set('email', leadEmail); 3002 if (leadPhone) params.set('phone', leadPhone); 3003 var a = document.getElementById('propertyAddress'); 3004 var c = document.getElementById('propertyCity'); 3005 var s = document.getElementById('propertyState'); 3006 var z = document.getElementById('propertyZip'); 3007 if (a && a.value) params.set('address', a.value.trim()); 3008 if (c && c.value) params.set('city', c.value.trim()); 3009 if (s && s.value) params.set('state', s.value.trim()); 3010 if (z && z.value) params.set('postal_code', z.value.trim()); 3011 var sep = leadFormPopUpRedirectUrl.includes('?') ? '&' : '?'; 3012 window.location.href = params.toString() 3013 ? leadFormPopUpRedirectUrl + sep + params.toString() 3014 : leadFormPopUpRedirectUrl; 3015 } 3016 3017 $('#overlay-back').delay(messageDelay + 500).fadeOut(200); 3018 $('#page').delay(messageDelay + 500).fadeTo('fast', 1); 3019 3020 } else if (response == "toomany") { 3021 $('#limitMessage').fadeIn().delay(messageDelay).fadeOut(); 3022 $('#overlay-back').delay(messageDelay + 500).fadeOut(200); 3023 $('#page').delay(messageDelay + 500).fadeTo('fast', 1); 3024 } else if (response === "invalid_email") { 3025 $('#invalid_email').fadeIn().delay(messageDelay).fadeOut(); 3026 $('#overlay-back').delay(messageDelay+500).fadeOut(200); 3027 $('#page').delay(messageDelay+500).fadeTo( 'fast', 1 ); 3028 } else if (response === "invalid_phone") { 3029 $('#invalid_phone').fadeIn().delay(messageDelay).fadeOut(); 3030 $('#overlay-back').delay(messageDelay+500).fadeOut(200); 3031 $('#page').delay(messageDelay+500).fadeTo( 'fast', 1 ); 3032 } else { 3033 // Form submission failed: Display the failure message, 3034 // then redisplay the form 3035 $('#failureMessage').fadeIn().delay(messageDelay).fadeOut(); 3036 $('#overlay-back').delay(messageDelay + 500).fadeOut(200); 3037 $('#page').delay(messageDelay + 500).fadeTo('fast', 1); 3038 } 3039 } 3040 3041 $(".gotoGetAPrice").click(function () { 3042 $('html, body').animate({ 3043 scrollTop: $("#get_a_price").offset().top - 100 3044 }, 1000); 3045 document.getElementById("senderName").focus(); 3046 }); 3047 3048 </script>
3048 3049 3050 3051 3052 3053 3054 <!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 3054-3055
3054 3055 <script async src="https://www.googletagmanager.com/gtag/js?id=
3055AW-768206984
vendor: 13 bytes, lines 3055-3056
3055"></script> 3056
3056<script> 3057
vendor: 135 bytes, lines 3057-3060
3057window.dataLayer = window.dataLayer || []; 3058 function gtag(){dataLayer.push(arguments);} 3059 gtag('js', new Date()); 3060 gtag('config', '
3060AW-768206984
vendor: 4 bytes, line 3060
3060');
3060</script>
3060 3061 3062
3063<script> 3064 setTimeout(function() { 3065 var script = document.createElement('script'); 3066 script.src = 'https://www.google.com/recaptcha/api.js'; 3067 script.defer = true; 3068 document.body.appendChild(script); 3069 }, 4200); 3070 setTimeout(function() { 3071 var script = document.createElement('script'); 3072 // look for hi-res images - same file name with @2x appended 3073 //script.src = '/js/retina99.min.js'; 3074 script.src = '/js/retina99.js'; 3075 script.defer = true; 3076 document.body.appendChild(script); 3077 }, 4300); 3078</script>
3078 3079 3080
3080<script> 3081 3082 3083 function validateForm() { 3084 var senderName = document.getElementById("senderName").value; 3085 var senderEmail = document.getElementById("senderEmail").value; 3086 var senderPhone = document.getElementById("senderPhone").value; 3087 3088 if (senderName.trim() === "") { 3089 alert("Please enter your name."); 3090 return false; 3091 } 3092 3093 if (senderEmail.trim() === "") { 3094 alert("Please enter your email."); 3095 return false; 3096 } 3097 3098 if (senderPhone.trim() === "") { 3099 alert("Please enter your phone number."); 3100 return false; 3101 } 3102 3103 // Validate address if address step is enabled 3104 var addressField = document.getElementById("propertyAddress"); 3105 if (addressField) { 3106 if (addressField.value.trim() === "") { 3107 alert("Please enter the property address."); 3108 return false; 3109 } 3110 // Only require autocomplete selection if Google Maps loaded OK 3111 if (!window.googleMapsAuthFailed) { 3112 var cityField = document.getElementById("propertyCity"); 3113 if (!cityField || cityField.value.trim() === "") { 3114 alert("Please select an address from the suggestions."); 3115 return false; 3116 } 3117 } 3118 } 3119 3120 // Regular expression pattern for validating email addresses 3121 var pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; 3122 if (!pattern.test(senderEmail)) { 3123 alert("Please check your email address."); 3124 return false; 3125 } 3126 3127 // if email address ends in .con, ask if they meant .com 3128 if (senderEmail.endsWith('.con')) { 3129 confirm('Did you mean .com at the end of your email address?'); 3130 return false; 3131 } 3132 3133 // validate phone number is US format - remove non-numeric characters and check it's 10 digits and first digit is not 0 or 1 3134 var phone = senderPhone.replace(/\D/g, ''); 3135 if (phone.length != 10) { 3136 alert("Please check your phone number."); 3137 return false; 3138 } 3139 // Area codes start with a number 2â9, followed by 0â8, and then any third digit. 3140 // The second group of three digits, known as the central office or exchange code, starts with a number 2â9, followed by any two digits. 3141 // The final four digits, known as the station code, have no restrictions. 3142 pattern = /^[2-9][0-8][0-9][2-9][0-9]{2}[0-9]{4}$/; 3143 if (!pattern.test(phone)) { 3144 alert("Please check your phone number."); 3145 return false; 3146 } 3147 // 222 and 555 are not valid area codes 3148 if (phone.substring(0, 3) == '222' || phone.substring(0, 3) == '555') { 3149 alert("Please check your phone number."); 3150 return false; 3151 } 3152 3153 return true; // Form submission will proceed if all fields are filled 3154 } 3155 3156 $(document).ready(function () { // when the document is ready 3157 // add a listener to the form submit event 3158 $("#demo-form").submit(function (e) { 3159 e.preventDefault(); // avoid execution of the actual submit of the form. 3160 const idSubmit = document.getElementById("idSubmit"); 3161 if (idSubmit) 3162 idSubmit.innerText = "... processing ..."; 3163 3164 var form = $(this); 3165 var url = form.attr('action') + '?ajax'; 3166 3167 $.ajax({ 3168 type: "POST", 3169 url: url, 3170 data: form.serialize(), // serializes the form's elements. 3171 success: function (data) { 3172 if (data == 'invalid_email') { 3173 //alert('Invalid email address. Please review your email address for typos and try again.'); 3174 if (idSubmit) 3175 idSubmit.innerText = "Get exclusive leads!"; 3176 return; 3177 } 3178 if (data == 'success') { 3179 let url = $("#hdnThankYouUrl").val(); 3180 if (url) 3181 window.location = url; 3182 else 3183 document.getElementById("idSubmit").innerText = "Success!"; 3184 } 3185 3186 const d = new Date(); 3187 d.toLocaleString('en-US', { timeZone: 'America/New_York' }) 3188 if (d.getDay() >= 1 && d.getDay() <= 5 && d.getHours() >= 9 && d.getHours() < 17) { 3189 // it's Mon-Fri between 9am - 5pm 3190 document.getElementById("overlay_open").style.display = "block"; 3191 } else { 3192 document.getElementById("overlay_closed").style.display = "block"; 3193 } 3194 document.getElementById("idPopUp").style.display = "none"; 3195 // document.getElementById("idPopUp").style.zIndex = 1; 3196 }, 3197 error: function (jqXHR, textStatus, errorThrown) { 3198 if (errorThrown) { 3199 alert('Error - ' + errorThrown); 3200 } else if (textStatus) { 3201 alert('Error - ' + textStatus); 3202 } else { 3203 alert('An unexpected error occurred. Please call us. We apologize for the inconvenience.') 3204 } 3205 } 3206 }); 3207 3208 }); 3209 }); 3210 3211 3212 </script>
3212 3213 3214 3215<link href="/css/pop.up.lead.form.css?v=2026.01.27e" rel="stylesheet" type="text/css"/> 3216 3217<div class="user-agent-warp"> 3218 <div id="divuseragent" class="user-agent-bubble message-left"> 3219 <div class="user-agent-avatar user-agent-fade-in"> 3220 <div class="user-agent-bubble-avatar"> 3221 <div class="user-agent-avatar-img-wrapper"> 3222 <img src="/css/images/repagent.png" id="imgAgentAvatar" alt="support Agent"/> 3223 </div> 3224 <div id="divPopUpLeadFormCounter" class="user-agent-bubble-avatar-counter">1</div> 3225 </div> 3226 </div> 3227 <div class="user-agent-bubble-message user-agent-fade-in" id="divuseragentmessage"> 3228 <button type="button" class="user-agent-bubble-close" id="btnCloseBubbleMessage" aria-label="Close message">×</button> 3229 <span id="spanuseragentmessage">Which type of leads are you looking for?</span> 3230 <div class="user-agent-bubble-arrow-left"></div> 3231 </div> 3232 </div> 3233</div> 3234<div style="display: none;"> 3235 <div id="modal-useragent" > 3236 <div id="divAgentDialogContent"> 3237 3238 </div> 3239 </div> 3240</div>
3241<script src="/js/pop.up.lead.form.99calls.js?v=2026.03.09a" defer></script>
3241 3242</body> 3243 3244 3245<div id="mobile-call-bar"> 3246<div style=" 3247 position:fixed; 3248 left:0; 3249 right:0; 3250 bottom:0; 3251 z-index:900; 3252 background:#0959a7; 3253 box-shadow: 0 -6px 14px rgba(0,0,0,.50), inset 0 1px 0 rgba(255,255,255,.35); 3254 border-top:1px solid rgba(255,255,255,.25); 3255"><a aria-label="Click To Call" 3256 href="tel:9497796129" 3257 onmouseout="this.style.backgroundColor='#0959a7'" 3258 onmouseover="this.style.backgroundColor='#0b6fd1'" 3259 ontouchend="this.style.backgroundColor='#0959a7'" 3260 ontouchstart="this.style.backgroundColor='#0b6fd1'" 3261 style="display: flex; align-items: center; justify-content: center; gap: 12px; height: 60px; width: 100%; background: #0b6fd1; text-decoration: none; color: white; font-family: -apple-system, BlinkMacSystemFont, Arial, sans-serif; -webkit-tap-highlight-color: transparent; position: relative;"> 3262 <span aria-hidden="true" style=" 3263 width:34px; 3264 height:34px; 3265 border-radius:50%; 3266 display:flex; 3267 align-items:center; 3268 justify-content:center; 3269 background:#ffffff; 3270 border:1px solid rgba(0,0,0,.28); 3271 box-shadow: inset 0 3px 4px rgba(0,0,0,.32), inset 0 -1px 0 rgba(255,255,255,.20); 3272 position:relative; 3273 z-index:2; 3274 "> 3275 <svg aria-hidden="true" height="16" style="fill:#0959a7;" viewBox="0 0 24 24" width="16"> 3276 <path d="M20.01 15.38c-1.23 0-2.42-.2-3.53-.56-.35-.12-.74-.03-1.01.24l-1.57 1.97c-2.83-1.35-5.48-3.9-6.89-6.83l1.95-1.66c.27-.28.35-.67.24-1.02-.37-1.11-.56-2.3-.56-3.53 0-.54-.45-.99-.99-.99H4.19C3.65 3 3 3.24 3 3.99 3 13.28 10.73 21 20.01 21c.71 0 .99-.63.99-1.18v-3.45c0-.54-.45-.99-.99-.99z"></path> 3277 </svg> 3278 </span> 3279 <span style="line-height:1.05; text-align:center; position:relative; z-index:2;"> 3280 <span style=" 3281 display:block; 3282 font-size:13px; 3283 font-weight:800; 3284 letter-spacing:.25px; 3285 text-shadow:0 1px 2px rgba(0,0,0,.35); 3286 ">Click To Call</span> 3287 <span style=" 3288 display:block; 3289 font-size:19px; 3290 font-weight:900; 3291 letter-spacing:.4px; 3292 text-shadow:0 2px 3px rgba(0,0,0,.45); 3293 ">(949) 779-6129</span> 3294 </span> 3295</a></div> 3296<div style="height:60px;"> </div> 3297</div>
3298<script>document.body.classList.add('has-fixed-call-now');</script>
3298 3299
3300<script> 3301 3302function onHeroRecaptchaSubmit(token) { 3303 var form = document.getElementById("hero-form"); 3304 var name = form.querySelector("[name='senderName']").value; 3305 var email = form.querySelector("[name='senderEmail']").value; 3306 var phone = form.querySelector("[name='senderPhone']").value; 3307 3308 if (name.trim() === "") { alert("Please enter your name."); return false; } 3309 if (email.trim() === "") { alert("Please enter your email."); return false; } 3310 if (phone.trim() === "") { alert("Please enter your phone number."); return false; } 3311 3312 var address = document.getElementById("hero-propertyAddress"); 3313 if (address) { 3314 if (address.value.trim() === "") { alert("Please enter the property address."); return false; } 3315 // Only require an autocomplete selection if Google Maps loaded OK 3316 if (!window.googleMapsAuthFailed && document.getElementById("hero-propertyCity").value.trim() === "") { 3317 alert("Please select an address from the suggestions."); return false; 3318 } 3319 } 3320 3321 var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; 3322 if (!emailRegex.test(email)) { alert("Please enter a valid email address."); return false; } 3323 3324 submitForm.apply(form); 3325} 3326 3327// Apply phone mask to hero form field once jQuery and mask plugin load 3328$(function() { 3329 if ($.fn.mask) { 3330 $("#hero-senderPhone").mask('(000) 000-0000'); 3331 } 3332}); 3333 3334</script>
3334 3335 3336 3337</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.