PageSourceSearch

https://johnnycsroofing.com/home/

html johnnycsroofing.com collected 2026-09-29 20:32:12 UTC 76,329 bytes, 1,281 lines download raw bytes

1<!DOCTYPE html>
2<!--[if IE 6]>
3<html id="ie6" lang="en-CA">
4<![endif]-->
5<!--[if IE 7]>
6<html id="ie7" lang="en-CA">
7<![endif]-->
8<!--[if IE 8]>
9<html id="ie8" lang="en-CA">
10<![endif]-->
11<!--[if !(IE 6) | !(IE 7) | !(IE 8)  ]><!-->
12<html lang="en-CA">
13<!--<![endif]-->
14<head>
15<meta charset="UTF-8" />
16<meta name="viewport" content="width=device-width" />
17<meta name="lnm.location" content="linknowmedia.fun" /> 
18<title>Johnny C's Roofing | Roofing Services</title>
19<link rel="profile" href="http://gmpg.org/xfn/11" />
20<link rel="pingback" href="https://johnnycsroofing.com/xmlrpc.php" />
21<!--[if lt IE 9]>
22<script src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/html5.js" type="text/javascript"></script>
22
23<![endif]-->
24	<link rel="shortcut icon" type="image/png" href="https://johnnycsroofing.com/wp-content/uploads/sites/353/2026/03/favicon.png" />
25<meta name='robots' content='max-image-preview:large' />
26<meta name="description" content="At Johnny C's Roofing, our masterful roofing services exceed expectations, every time! Click the link to check out our website!" /><meta name="keywords" content="East Providence Roofing Contractor, East Providence Roofing Company, East Providence Siding Services, Narragansett Roofing Contractor, Narragansett Roofing Company, Narragansett Siding Services, Newport Roofing Contractor, Newport Roofing Company, Newport Siding Services" /><meta name="lnm.themename" content="rfr5" /><link rel='dns-prefetch' href='//www.google.com' />
27<link rel='dns-prefetch' href='//maps.googleapis.com' />
28<link rel='dns-prefetch' href='//kit.fontawesome.com' />
29<link rel="alternate" type="application/rss+xml" title="Johnny C&#039;s Roofing Co &raquo; Home Comments Feed" href="https://johnnycsroofing.com/home/feed/" />
30<style id="wp-img-auto-sizes-contain-inline-css">
31img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
32/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
33</style>
34<style id="wp-block-library-inline-css">
35:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
35--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
36
37/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
38</style>
39
40<style id="global-styles-inline-css">
41:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
41--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
41.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
42/*# sourceURL=global-styles-inline-css */
43</style>
44
45<link rel='stylesheet' id='normalize-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/normalize.min.css' media='all' />
46<link rel='stylesheet' id='foundation-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/foundation.css' media='all' />
47<link rel='stylesheet' id='style-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/style.css' media='all' />
48<link rel='stylesheet' id='slick-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/slick/slick.css' media='all' />
49<link rel='stylesheet' id='pagestylephp-css' href='https://johnnycsroofing.com/wp-content/themes/rfr5/page-css.php' media='all' />
50<script id="jquery-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/jquery.min.js"></script>
vendor: 1 bytes, line 50
50
51<script id="foundationjs-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/js/foundation/foundation.js"></script>
vendor: 1 bytes, line 51
51
52<script id="topbar-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/js/foundation/foundation.topbar.js"></script>
vendor: 1 bytes, line 52
52
53<script id="fontawesome-js" src="https://kit.fontawesome.com/f9c8f97a41.js"></script>
vendor: 1 bytes, line 53
53
54<script id="modernizr-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/vendor/modernizr.js"></script>
54
55<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://johnnycsroofing.com/xmlrpc.php?rsd" />
56<meta name="generator" content="WordPress 7.1.2" />
57<link rel="canonical" href="https://johnnycsroofing.com" />
58<link rel='shortlink' href='https://johnnycsroofing.com/?p=59' />
59<script src='https://johnnycsroofing.com/?dm=fcba057eea8bd5e2ee7fbd61ba5c4ead&amp;action=load&amp;blogid=353&amp;siteid=1&amp;t=1798213891&amp;back=https%3A%2F%2Fjohnnycsroofing.com%2Fhome%2F' type='text/javascript'></script>
59    
59<script type="text/javascript"> 
60    	var lnmcrAjaxUrl = "https://johnnycsroofing.com/wp-admin/admin-ajax.php";
61		var lnmcrNonce   = "d1e2ddf1ef";
62
63    	// ultimate url regex
64    	function urlRegex(string){
65			var regex = "((?:(http|https|Http|Https|rtsp|Rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)"
66			+ "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_"
67			+ "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?"
68			+ "((?:(?:[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}\\.)+"   // named host
69			+ "(?:"   // plus top level domain
70			+ "(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])"
71			+ "|(?:biz|b[abdefghijmnorstvwyz])"
72			+ "|(?:cat|com|coop|c[acdfghiklmnoruvxyz])"
73			+ "|d[ejkmoz]"
74			+ "|(?:edu|e[cegrstu])"
75			+ "|f[ijkmor]"
76			+ "|(?:gov|g[abdefghilmnpqrstuwy])"
77			+ "|h[kmnrtu]"
78			+ "|(?:info|int|i[delmnoqrst])"
79			+ "|(?:jobs|j[emop])"
80			+ "|k[eghimnrwyz]"
81			+ "|l[abcikrstuvy]"
82			+ "|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz])"
83			+ "|(?:name|net|n[acefgilopruz])"
84			+ "|(?:org|om)"
85			+ "|(?:pro|p[aefghklmnrstwy])"
86			+ "|qa"
87			+ "|r[eouw]"
88			+ "|s[abcdeghijklmnortuvyz]"
89			+ "|(?:tel|travel|t[cdfghjklmnoprtvwz])"
90			+ "|u[agkmsyz]"
91			+ "|v[aceginu]"
92			+ "|w[fs]"
93			+ "|y[etu]"
94			+ "|z[amw]))"
95			+ "|(?:(?:25[0-5]|2[0-4]" // or ip address
96			+ "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(?:25[0-5]|2[0-4][0-9]"
97			+ "|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1]"
98			+ "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
99			+ "|[1-9][0-9]|[0-9])))"
100			+ "(?:\\:\\d{1,5})?)" // plus option port number
101			+ "(\\/(?:(?:[a-zA-Z0-9\\;\\/\\?\\:\\@\\&\\=\\#\\~"  // plus option query params
102			+ "\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?"
103			+ "(?:\\b|$)";
104       		if (regex.match(string)) {
105				return 'Error: Urls are not allowed.';
106    		} else {
107				return true; // invalid email.
108			}
109    	}
110
111    	// detect urls in strings
112		function detectUrl(string) {
113    		if (string.match(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/)) {
114				return true;
115    		} else {
116				return false;
117			}
118		}
119
120    	function validateTextareaValue(textarea){
121			if (textarea.length<8 || textarea.length>1000) {
122				return 'Error: Your review text must be between 8 and 1000 characters in length.';
123			} else {
124				if (detectUrl(textarea) == true) {
125					// Url detected in textarea body. 
126					return 'Error: Your review text must NOT contain any urls.';
127	    		} else {
128					return true;
129				}
130			}
131    	}
132
133    	// for text
134    	function reviewTextValidation(){
135			var erriddiv  = '#lnmreviewtext-error';
136			var validate = urlRegex($('#lnmreviewtext').val());
137			var validated = validateTextareaValue($('#lnmreviewtext').val());
138			if (validated !== true || validate !== true) {
139				$('#lnmreviewtext').addClass('review-error');
140				$(erriddiv).html(validated).slideDown(0);
141				return false;
142			} else {
143				return true;
144			};
145    	}
146
147
148
149		
150		
151		// for input name
152		function validateNameValue(name){
153			var regex = /^[a-zA-Z\s]+$/;
154			if (name.length<3 || name.length>32) {
155				return 'Error: Your review name must be between 3 and 32 characters in length.';
156			} else {
157				if (regex.test(name)) {
158					return true;
159				} else {
160					return 'Error: Please use only letters and spaces.';
161				}
162			}
163		}
164		// for name
165		function reviewNameValidation(){
166			var erriddiv  = '#lnmreviewname-error';
167			var validated = validateNameValue($('#lnmreviewname').val());
168			if (validated !== true) {
169				$('#lnmreviewname').addClass('review-error');
170				$(erriddiv).html(validated).slideDown(0);
171				return false;
172			} else {
173				return true;
174			};
175		}
176
177		
178		
179
180		// for input email
181		function validateEmailValue(email){
182			var regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
183				if (regex.test(email)) {
184				return true;
185			} else {
186				// invalid email.
187				return 'Error: The email provided is invalid.';
188			}
189		}
190
191		// for email
192		function reviewEmailValidation(){
193			var erriddiv  = '#lnmreviewemail-error';
194			var validated = validateEmailValue($('#lnmreviewemail').val());
195			if (validated !== true) {
196				$('#lnmreviewemail').addClass('review-error');
197				$(erriddiv).html(validated).slideDown(0);
198				return false;
199			} else {
200				return true;
201			};
202		}
203
204		
205
206    	// for terms
207    	function reviewTermsValidation(){
208			var erriddiv  = '#lnmreviewterms-error';
209			if (!$('#lnmreviewterms').is(':checked')) {
210				$('#lnmreviewterms').addClass('review-error');
211				$(erriddiv).html('You must agree to terms.').slideDown(0);
212				return false;
213			} else {
214				return true;
215			};
216    	}
217
218    	function reviewAllValidation(){
219    		var isvalid = true;
220			
221			// Validate Terms
222			var terms	= reviewTermsValidation();
223			if (terms === false) {
224				isvalid = false;
225			};
226
227			// Validate Text
228			var text	= reviewTextValidation();
229			if (text === false) {
230				isvalid = false;
231			};
232									// Validate Author
233			var name	= reviewNameValidation();
234			if (name === false) {
235				isvalid = false;
236			};
237									// Validate Email
238			var email	= reviewEmailValidation();
239			if (email === false) {
240				isvalid = false;
241			};
242						return isvalid;
243    	}
244
245
246    	$(function(){
247    		$('.review-error-container').slideUp(0);
248    		$('.lnmcr-submit').addClass('disabled');
249
250
251			$( '#lnmreviewform input, #lnmreviewform textarea' ).on("change", function(){
252				var erriddiv  = '#'+$(this).attr('id')+'-error';
253				$(this).removeClass('review-error');
254				$(erriddiv).empty().slideUp(0);
255			});
256			$( '#lnmreviewform input, #lnmreviewform textarea' ).on("blur", function(){
257				if ($(this).attr('type') !== 'radio') {
258
259																// lnmreviewname
260						if ($(this).attr('id') === 'lnmreviewname') {
261							reviewNameValidation();
262						};
263																// lnmreviewemail
264						if ($(this).attr('id') === 'lnmreviewemail') {
265							reviewEmailValidation();
266						};
267											// lnmreviewtext
268						if ($(this).attr('id') === 'lnmreviewtext') {
269							reviewTextValidation();
270						};
271						// lnmreviewterms
272						if ($(this).attr('id') === 'lnmreviewterms') {
273							reviewTermsValidation();
274						};
275				};
276			});
277
278			$('#lnmreviewterms').change(function(){
279				if (this.checked) {
280					var isvalidreview = reviewAllValidation();
281					if (isvalidreview === false) {
282						$(this).prop('checked', false);
283						$('.lnmcr-submit').addClass('disabled');
284					} else {
285						$('.lnmcr-submit').removeClass('disabled');
286					};
287				};
288			});
289
290			$( '.lnmcr-submit' ).on( 'click', function(e) {
291				e.preventDefault();
292				var isvalidreview = reviewAllValidation();
293				if (isvalidreview === true) {
294		    		var serializedata = $("#lnmreviewform").serialize();
295		    		serializedata = serializedata.split('&');
296		    		for (var i = serializedata.length - 1; i >= 0; i--) {
297		    			if (!serializedata[i].startsWith('lnmcr')) {
298		    				delete serializedata[i];
299		    			}
300		    		};
301		    		serializedata = serializedata.flat().join("&");
302
303					$.ajax({
304					  url:         lnmcrAjaxUrl,                   // no “?action” here
305					  method:      'POST',
306					  dataType:    'json',                         // expect JSON back
307					  crossDomain: true,
308					  xhrFields:   { withCredentials: true },      // send cookies/session
309					  data: {
310					    action: 'lnmcr_ajax_post',
311					    security: lnmcrNonce,    
312					    lnmreviewterms:    $('#lnmreviewterms').val(),
313					    lnmreviewserialized: serializedata,
314					  },
315					  beforeSend() {
316					    $('#lnmreviewform').slideUp(250);
317					    $('#review-response-container')
318					      .html('<i class="fa-solid fa-spinner fa-spin-pulse"></i>');
319					  },
320					  success(response) {
321					  	console.log(response);
322					    setTimeout(() => {
323					   	 $('#review-response-container').html('<span style="background:white;padding:10px;border-radius:4px;display:block">'+response.data+'<span>');
324					    }, 3500);
325					  },
326					  error(xhr) {
327					    console.error('AJAX error', xhr.status, xhr.responseText);
328					    $('#review-response-container')
329					      .html('<span style="background:white;padding:10px;border-radius:4px;display:block" class="error-message">Unexpected error occurred.</span>');
330					  }
331					});
332
333				}
334			});
335    	});
336    </script>
336
337<!-- pulled from default Schema Settings & Modified by LinkNow Media Customer Reviews -->
337<script type="application/ld+json">{"@context":"http:\/\/schema.org\/","@type":"LocalBusiness","name":"Johnny C's Roofing","description":"Roofing Contractor, Roofing Company and Siding Services","image":"https:\/\/johnnycsroofing.com\/wp-content\/themes\/rfr5\/images\/rich-card.png","url":"https:\/\/johnnycsroofing.com","logo":"https:\/\/johnnycsroofing.com\/wp-content\/uploads\/sites\/353\/2026\/03\/logo.png","faxNumber":"","email":"keith@johnnycsroo\ufb01ng.com","areaServed":"East Providence, Narragansett and Newport","paymentAccepted":"Visa, Mastercard, American Express, Discover, Cash, Check, Debit","address":{"@type":"PostalAddress","streetAddress":"","addressLocality":"East Providence","addressRegion":"RI","postalCode":"02914-4013","postOfficeBoxNumber":""},"sameAs":["https:\/\/www.facebook.com\/JohnnyCsRoofing\/","https:\/\/www.google.com\/maps?cid=17711842953272353810"],"contactPoint":[{"@type":"ContactPoint","telephone":"+1-401-727-1324","contactType":"customer service"}],"telephone":"+1-401-727-1324","openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Monday","opens":"08:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Tuesday","opens":"08:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Wednesday","opens":"08:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Thursday","opens":"08:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":"http:\/\/schema.org\/Friday","opens":"08:00","closes":"17:00"}],"review":[]}</script>
337 
338        <!-- Google tag (gtag.js) (GA4) -->
vendor: 73 bytes, lines 338-339
338 
339        <script async src="https://www.googletagmanager.com/gtag/js?id=
339G-E52YFCXG7Y
vendor: 21 bytes, lines 339-340
339"></script> 
340        
340<script>
341            
vendor: 164 bytes, lines 341-344
341window.dataLayer = window.dataLayer || [];
342            function gtag(){dataLayer.push(arguments);} 
343            gtag('js', new Date());
344            gtag('config', '
344G-E52YFCXG7Y
vendor: 13 bytes, lines 344-345
344'); 
345        
345</script>
345
346        	
347	<meta name="townorder" id="townorder" content="East Providence, Narragansett and Newport">
348<meta name="marketspecialties" id="marketspecialties" content="Roofing Contractor, Roofing Company and Siding Services">
349<meta name="city" id="city" content="East Providence">
350<link rel='stylesheet' id='datetimecss-css' href='https://johnnycsroofing.com/wp-content/plugins/linknowmedia-email/styles/jquery.datetimepicker.css' media='all' />
351
352</head>
353<body class="wp-singular page-template-default page page-id-59 wp-theme-rfr5">
354
355<header class="header-wrapper header-home clearfix">
356    <div class="mobile-menu hide-for-large-up">
357        <span class="mobile-navigation navigation-toggle"><i class="toggle-bars fa fa-bars"></i></span>
358        <div class="navigation-wrapper fullwidth-navigation">
359            <nav  class="top-bar fading"  data-options=" custom_back_text: true; back_text: Back;" data-topbar itemscope itemtype="http://www.schema.org/SiteNavigationElement">
360	<ul class="title-area">
361		<li class="name"></li>
362		<li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
363	</ul>
364	  <div class="top-bar-section section">
365	<div class="menu"><ul>
366<li class="page_item page-item-59 current_page_item active"><a href="https://johnnycsroofing.com/home/" aria-current="page">Home</a></li>
367<li class="page_item page-item-60 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/about-us/">About</a>
368<ul class='dropdown'>
369	<li class="page_item page-item-507"><a href="https://johnnycsroofing.com/about-us/blog/">Blog</a></li>
370	<li class="page_item page-item-509"><a href="https://johnnycsroofing.com/about-us/reviews/">Testimonials</a></li>
371</ul>
372</li>
373<li class="page_item page-item-61 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/roofing-services/">Roofing Services</a>
374<ul class='dropdown'>
375	<li class="page_item page-item-62"><a href="https://johnnycsroofing.com/roofing-services/commercial-roofing/">Commercial Roofing</a></li>
376	<li class="page_item page-item-63"><a href="https://johnnycsroofing.com/roofing-services/emergency-roof-repair/">Emergency Roof Repair</a></li>
377	<li class="page_item page-item-64"><a href="https://johnnycsroofing.com/roofing-services/hail-and-storm-damage-roof-repair/">Hail and Storm Damage Roof Repair</a></li>
378	<li class="page_item page-item-65"><a href="https://johnnycsroofing.com/roofing-services/roof-inspections/">Roof Inspections</a></li>
379	<li class="page_item page-item-66"><a href="https://johnnycsroofing.com/roofing-services/roof-maintenance/">Roof Maintenance</a></li>
380	<li class="page_item page-item-67"><a href="https://johnnycsroofing.com/roofing-services/roof-repair/">Roof Repair</a></li>
381	<li class="page_item page-item-68"><a href="https://johnnycsroofing.com/roofing-services/roof-restoration/">Roof Restoration</a></li>
382	<li class="page_item page-item-69"><a href="https://johnnycsroofing.com/roofing-services/roofer/">Roofer</a></li>
383	<li class="page_item page-item-70"><a href="https://johnnycsroofing.com/roofing-services/roofing-company/">Roofing Company</a></li>
384	<li class="page_item page-item-71"><a href="https://johnnycsroofing.com/roofing-services/roofing-services/">Roofing Services</a></li>
385	<li class="page_item page-item-221"><a href="https://johnnycsroofing.com/roofing-services/service-areas/">Service Areas</a></li>
386</ul>
387</li>
388<li class="page_item page-item-103 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/siding-and-gutter-services/">Siding and Gutter Services</a>
389<ul class='dropdown'>
390	<li class="page_item page-item-154"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-contractor/">Aluminum Siding Contractor</a></li>
391	<li class="page_item page-item-120"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-installation/">Aluminum Siding Installation</a></li>
392	<li class="page_item page-item-156"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-repair/">Aluminum Siding Repair</a></li>
393	<li class="page_item page-item-122"><a href="https://johnnycsroofing.com/siding-and-gutter-services/downspout-installation/">Downspout Installation</a></li>
394	<li class="page_item page-item-134"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-cleaning/">Gutter Cleaning</a></li>
395	<li class="page_item page-item-136"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-guard-installation/">Gutter Guard Installation</a></li>
396	<li class="page_item page-item-125"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-installation/">Gutter Installation</a></li>
397	<li class="page_item page-item-138"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-repair/">Gutter Repair</a></li>
398	<li class="page_item page-item-128"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-replacement/">Gutter Replacement</a></li>
399	<li class="page_item page-item-140"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-services/">Gutter Services</a></li>
400	<li class="page_item page-item-130"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-company/">Siding Company</a></li>
401	<li class="page_item page-item-142"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-contractor/">Siding Contractor</a></li>
402	<li class="page_item page-item-132"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-installation/">Siding Installation</a></li>
403	<li class="page_item page-item-144"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-repair/">Siding Repair</a></li>
404	<li class="page_item page-item-116"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-replacement/">Siding Replacement</a></li>
405	<li class="page_item page-item-146"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-services/">Siding Services</a></li>
406	<li class="page_item page-item-118"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-contractor/">Vinyl Siding Contractor</a></li>
407	<li class="page_item page-item-148"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-installation/">Vinyl Siding Installation</a></li>
408	<li class="page_item page-item-108"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-repair/">Vinyl Siding Repair</a></li>
409	<li class="page_item page-item-113"><a href="https://johnnycsroofing.com/siding-and-gutter-services/window-installation/">Window Installation</a></li>
410	<li class="page_item page-item-150"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-contractor/">Wood Siding Contractor</a></li>
411	<li class="page_item page-item-111"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-installation/">Wood Siding Installation</a></li>
412	<li class="page_item page-item-152"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-repair/">Wood Siding Repair</a></li>
413</ul>
414</li>
415<li class="page_item page-item-72 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/types-of-roofs/">Types of Roofs</a>
416<ul class='dropdown'>
417	<li class="page_item page-item-73"><a href="https://johnnycsroofing.com/types-of-roofs/epdm-roofing/">EPDM Roofing</a></li>
418	<li class="page_item page-item-74"><a href="https://johnnycsroofing.com/types-of-roofs/flat-roofing/">Flat Roofing</a></li>
419	<li class="page_item page-item-76"><a href="https://johnnycsroofing.com/types-of-roofs/metal-roofing/">Metal Roofing</a></li>
420	<li class="page_item page-item-77"><a href="https://johnnycsroofing.com/types-of-roofs/modified-bitumen-roofing/">Modified Bitumen Roofing</a></li>
421	<li class="page_item page-item-78"><a href="https://johnnycsroofing.com/types-of-roofs/shingle-roofing/">Shingle Roofing</a></li>
422</ul>
423</li>
424<li class="page_item page-item-87"><a href="https://johnnycsroofing.com/faq/">FAQ</a></li>
425<li class="page_item page-item-88"><a href="https://johnnycsroofing.com/gallery/">Gallery</a></li>
426<li class="page_item page-item-89"><a href="https://johnnycsroofing.com/contact-us/">Contact</a></li>
427</ul></div>
428</div></nav>
429         </div>
430     </div>
431    <div class="row header-bar">
432        <div class="large-3 columns header-details">
433            <div class="logo-wrapper">
434                <a href="/" title="Johnny C's Roofing"><img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2026/03/logo.png" alt="Johnny C's Roofing Logo" width="200" height="195"></a>
435             </div>
436         </div>
437        <div class="large-7 columns navigation-wrapper strip-padding hide-for-medium-d
437own">
438            <nav  class="top-bar fading"  data-options=" custom_back_text: true; back_text: Back;" data-topbar itemscope itemtype="http://www.schema.org/SiteNavigationElement">
439	<ul class="title-area">
440		<li class="name"></li>
441		<li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
442	</ul>
443	  <div class="top-bar-section section">
444	<div class="menu"><ul>
445<li class="page_item page-item-59 current_page_item active"><a href="https://johnnycsroofing.com/home/" aria-current="page">Home</a></li>
446<li class="page_item page-item-60 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/about-us/">About</a>
447<ul class='dropdown'>
448	<li class="page_item page-item-507"><a href="https://johnnycsroofing.com/about-us/blog/">Blog</a></li>
449	<li class="page_item page-item-509"><a href="https://johnnycsroofing.com/about-us/reviews/">Testimonials</a></li>
450</ul>
451</li>
452<li class="page_item page-item-61 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/roofing-services/">Roofing Services</a>
453<ul class='dropdown'>
454	<li class="page_item page-item-62"><a href="https://johnnycsroofing.com/roofing-services/commercial-roofing/">Commercial Roofing</a></li>
455	<li class="page_item page-item-63"><a href="https://johnnycsroofing.com/roofing-services/emergency-roof-repair/">Emergency Roof Repair</a></li>
456	<li class="page_item page-item-64"><a href="https://johnnycsroofing.com/roofing-services/hail-and-storm-damage-roof-repair/">Hail and Storm Damage Roof Repair</a></li>
457	<li class="page_item page-item-65"><a href="https://johnnycsroofing.com/roofing-services/roof-inspections/">Roof Inspections</a></li>
458	<li class="page_item page-item-66"><a href="https://johnnycsroofing.com/roofing-services/roof-maintenance/">Roof Maintenance</a></li>
459	<li class="page_item page-item-67"><a href="https://johnnycsroofing.com/roofing-services/roof-repair/">Roof Repair</a></li>
460	<li class="page_item page-item-68"><a href="https://johnnycsroofing.com/roofing-services/roof-restoration/">Roof Restoration</a></li>
461	<li class="page_item page-item-69"><a href="https://johnnycsroofing.com/roofing-services/roofer/">Roofer</a></li>
462	<li class="page_item page-item-70"><a href="https://johnnycsroofing.com/roofing-services/roofing-company/">Roofing Company</a></li>
463	<li class="page_item page-item-71"><a href="https://johnnycsroofing.com/roofing-services/roofing-services/">Roofing Services</a></li>
464	<li class="page_item page-item-221"><a href="https://johnnycsroofing.com/roofing-services/service-areas/">Service Areas</a></li>
465</ul>
466</li>
467<li class="page_item page-item-103 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/siding-and-gutter-services/">Siding and Gutter Services</a>
468<ul class='dropdown'>
469	<li class="page_item page-item-154"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-contractor/">Aluminum Siding Contractor</a></li>
470	<li class="page_item page-item-120"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-installation/">Aluminum Siding Installation</a></li>
471	<li class="page_item page-item-156"><a href="https://johnnycsroofing.com/siding-and-gutter-services/aluminum-siding-repair/">Aluminum Siding Repair</a></li>
472	<li class="page_item page-item-122"><a href="https://johnnycsroofing.com/siding-and-gutter-services/downspout-installation/">Downspout Installation</a></li>
473	<li class="page_item page-item-134"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-cleaning/">Gutter Cleaning</a></li>
474	<li class="page_item page-item-136"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-guard-installation/">Gutter Guard Installation</a></li>
475	<li class="page_item page-item-125"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-installation/">Gutter Installation</a></li>
476	<li class="page_item page-item-138"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-repair/">Gutter Repair</a></li>
477	<li class="page_item page-item-128"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-replacement/">Gutter Replacement</a></li>
478	<li class="page_item page-item-140"><a href="https://johnnycsroofing.com/siding-and-gutter-services/gutter-services/">Gutter Services</a></li>
479	<li class="page_item page-item-130"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-company/">Siding Company</a></li>
480	<li class="page_item page-item-142"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-contractor/">Siding Contractor</a></li>
481	<li class="page_item page-item-132"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-installation/">Siding Installation</a></li>
482	<li class="page_item page-item-144"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-repair/">Siding Repair</a></li>
483	<li class="page_item page-item-116"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-replacement/">Siding Replacement</a></li>
484	<li class="page_item page-item-146"><a href="https://johnnycsroofing.com/siding-and-gutter-services/siding-services/">Siding Services</a></li>
485	<li class="page_item page-item-118"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-contractor/">Vinyl Siding Contractor</a></li>
486	<li class="page_item page-item-148"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-installation/">Vinyl Siding Installation</a></li>
487	<li class="page_item page-item-108"><a href="https://johnnycsroofing.com/siding-and-gutter-services/vinyl-siding-repair/">Vinyl Siding Repair</a></li>
488	<li class="page_item page-item-113"><a href="https://johnnycsroofing.com/siding-and-gutter-services/window-installation/">Window Installation</a></li>
489	<li class="page_item page-item-150"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-contractor/">Wood Siding Contractor</a></li>
490	<li class="page_item page-item-111"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-installation/">Wood Siding Installation</a></li>
491	<li class="page_item page-item-152"><a href="https://johnnycsroofing.com/siding-and-gutter-services/wood-siding-repair/">Wood Siding Repair</a></li>
492</ul>
493</li>
494<li class="page_item page-item-72 page_item_has_children has-dropdown not-click"><a href="https://johnnycsroofing.com/types-of-roofs/">Types of Roofs</a>
495<ul class='dropdown'>
496	<li class="page_item page-item-73"><a href="https://johnnycsroofing.com/types-of-roofs/epdm-roofing/">EPDM Roofing</a></li>
497	<li class="page_item page-item-74"><a href="https://johnnycsroofing.com/types-of-roofs/flat-roofing/">Flat Roofing</a></li>
498	<li class="page_item page-item-76"><a href="https://johnnycsroofing.com/types-of-roofs/metal-roofing/">Metal Roofing</a></li>
499	<li class="page_item page-item-77"><a href="https://johnnycsroofing.com/types-of-roofs/modified-bitumen-roofing/">Modified Bitumen Roofing</a></li>
500	<li class="page_item page-item-78"><a href="https://johnnycsroofing.com/types-of-roofs/shingle-roofing/">Shingle Roofing</a></li>
501</ul>
502</li>
503<li class="page_item page-item-87"><a href="https://johnnycsroofing.com/faq/">FAQ</a></li>
504<li class="page_item page-item-88"><a href="https://johnnycsroofing.com/gallery/">Gallery</a></li>
505<li class="page_item page-item-89"><a href="https://johnnycsroofing.com/contact-us/">Contact</a></li>
506</ul></div>
507</div></nav>
508         </div>
509        <div class="large-2 columns header-cta text-right hide-for-medium-d
509own">
510            <a class="header-cta-btn" href="tel:+14017271324">(401) 727-1324 </a>
511         </div>
512     </div>
513    <div class="row full">
514        <div class="large-12 columns strip-padding slider-wrapper">
515            <div class="slick-header-slider">
516
517			<div>
518				<img src='https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/slider1.jpg' alt='Roofing Contractor' />
519			</div>
520			<div>
521				<img src='https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/slider2.jpg' alt='Shingle Roofing' />
522			</div>
523			<div>
524				<img src='https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/slider3.jpg' alt='Roofs and Gutters' />
525			</div></div>
526<div class="slick-button-container"></div>	
526<script>
527	jQuery(function($){
528		// Prefer the specific instance by ID, fall back to class if needed
529		var $slider = $("#slick-0");
530		if (!$slider.length) $slider = $(".slick-header-slider").first();
531		if (!$slider.length) return;
532
533		var hasMobileImage = false;
534		var useStatic = hasMobileImage && window.matchMedia("(max-width: 1024px)").matches;
535
536		if (useStatic) {
537			// Replace the slider container with the static image
538			var $img = $("<img>", {
539				src: "",
540				alt: ""
541			});
542			$slider.replaceWith($img);
543			return; // do NOT initialize slick
544		}
545
546		// Initialize slick as usual
547		$slider.slick({
548			slide: 'div',
549			centerMode: false,
550			focusOnSelect: false,
551
552			accessibility: true,
553			pauseOnHover: false,
554			draggable: true,
555			touchMove: true,
556			infinite: true,
557			arrows: false,
558			useCSS: true,
559			swipe: true,
560
561			pauseOnDotsHover: false,
562			adaptiveHeight: false,
563			variableWidth: false,
564			swipeToSlide: false,
565			vertical: false,
566			autoplay: true,
567			dots: false,
568			fade: true,
569			rtl: false,
570
571			appendArrows: '.slick-button-container',
572
573			autoplaySpeed: 5000,
574			easing: 'swing',
575			speed: 1000,
576			slidesToShow: 1,
577			centerPadding: '0',
578			asNavFor: ''
579					});
580	});
581	</script>
581
582	
583            <span class="scroll-arrow hide-for-medium-down"></span>
584         </div>
585        <div class="large-6 columns span-text hide-for-medium-down">
586            <p>Book With <span>Johnny C's Roofing</span></p>
587         </div>
588        <div class="large-6 columns slide-text hide-for-medium-down">
589            <div class="slick-text-slider">
590<div><p class='caption'>Roofing Contractor</p></div><div><p class='caption'>Roofing Company</p></div><div><p class='caption'>Roofing Company</p></div></div>
591<div class="slick-button-container"></div>	
591<script>
592	jQuery(function($){
593		// Prefer the specific instance by ID, fall back to class if needed
594		var $slider = $("#slick-1");
595		if (!$slider.length) $slider = $(".slick-text-slider").first();
596		if (!$slider.length) return;
597
598		var hasMobileImage = false;
599		var useStatic = hasMobileImage && window.matchMedia("(max-width: 1024px)").matches;
600
601		if (useStatic) {
602			// Replace the slider container with the static image
603			var $img = $("<img>", {
604				src: "",
605				alt: ""
606			});
607			$slider.replaceWith($img);
608			return; // do NOT initialize slick
609		}
610
611		// Initialize slick as usual
612		$slider.slick({
613			slide: 'div',
614			centerMode: false,
615			focusOnSelect: false,
616
617			accessibility: true,
618			pauseOnHover: false,
619			draggable: true,
620			touchMove: true,
621			infinite: true,
622			arrows: false,
623			useCSS: true,
624			swipe: true,
625
626			pauseOnDotsHover: false,
627			adaptiveHeight: false,
628			variableWidth: false,
629			swipeToSlide: false,
630			vertical: false,
631			autoplay: true,
632			dots: false,
633			fade: true,
634			rtl: false,
635
636			appendArrows: '.slick-button-container',
637
638			autoplaySpeed: 5000,
639			easing: 'swing',
640			speed: 1000,
641			slidesToShow: 1,
642			centerPadding: '0',
643			asNavFor: ''
644					});
645	});
646	</script>
646
647	
648         </div>
649        <div class="large-6 columns tag-text hide-for-medium-down">
650            <p>Located in East Providence servicing East Providence, Narragansett, Newport and surrounding areas</p>
651            <div class="top-btn top-padding-xs">
652                <a class="btn-slider" href="tel:+14017271324">Call Us </a>
653                <a href="/contact-us/" title="Contact us to Get Started Today" class=" btn-slider smaller-text">Contact Us</a>
654             </div>
655         </div>
656     </div>
657</header>
658<div class="mobile-sticky-cta">
659  <a class="sticky-btn" href="tel:+14017271324">Call Us </a>
660  <a href="/contact-us/" class="sticky-btn alt" title="Send Us A Message">Message Us</a>
661 </div><div class="clearfix"></div><main >
662<article class="section-article" >	
663    <div class="vertical-padding-xs side-buffer m-vpad-none">
664        <div class="row vertical-padding-large m-vpad-none" data-equalizer >
665            <div class="large-7 columns content-right-buffer first-section" data-equalizer-watch >
666                <h1>Roofing Services</h1>
667                <p>Johnny C's Roofing is the leading local roofing company. We provide a complete range of services defined by quality, innovation, and expertise. With years of experience, we’ve developed a strong reputation for our masterful craftsmanship and committed customer service, always going above and beyond to meet our clients’ needs. For quality roofing from trusted professionals, we are the team for the job.</p>
668                <p>To schedule a no-obligation consultation, call us at (401) 727-1324 today.</p>
669                <div class="vertical-padding-small cta-btn-holder">
670                    <a class="cta-btn" href="tel:+14017271324">CALL NOW </a>
671                 </div>
672             </div>
673            <div class="large-5 columns bg-holder strip-padding top-padding-small" data-equalizer-watch >
674                <div class="home-img1"> </div>
675             </div>
676         </div>
677     </div>
678    <div class="vertical-padding-xs side-buffer m-vpad-none home-bg">
679        <div class="row vertical-padding-large inline-flex">
680            <div class="large-9 columns">
681                <h2>Industry Experts, Superior Roof Work</h2>
682                <p>We’re more than roofers: We’re masters of our craft. We combine a comprehensive understanding of our field with rigorous training, education, and experience. Our high level of expertise pays off in dividends for our clients. It allows us to deliver a superior standard of service, more efficient workmanship, and stellar results on every job. As a roofing company, we strive to develop smart solutions that save our customers time and money. We stick to our deadlines, and we consistently stay well under our clients’ budgets while ensuring excellent quality control. Rest assured: When you choose us, you can take comfort knowing you’ve chosen well. You’ve chosen the best in the business.</p>
683                <p><a href="https://external-app.gethearth.com/partners/johnny-cs-roofing?utm_campaign=57486&utm_content=darkblue&utm_medium=contractor-website&utm_source=contractor&utm_term=700x110" target="_blank">
684                    <img src="https://external-app.gethearth.com/contractor_images/johnny-cs-roofing/banner.jpg?color=darkblue&size_id=700x110"alt="Hearth 700x110"style="height:110px;width:700px" />
685                </a></p>
686             </div>
687            <div class="large-3 columns text-center strip-padding">
688                <div class="fb-page" data-href="https://www.facebook.com/JohnnyCsRoofing/" data-tabs="timeline" data-width="" data-height="" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><blockquote cite="https://www.facebook.com/JohnnyCsRoofing/" class="fb-xfbml-parse-ignore"><a href="https://www.facebook.com/JohnnyCsRoofing/">Johnny C's Roofing Company INC.</a></blockquote></div>
689
690                <div id="fb-root"></div>
691                
691<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v23.0"></script>
691
692             </div>
693         </div>
694     </div>
695    <div class="vertical-padding-large side-buffer m-vpad-none">
696        <div class="row" data-equalizer >
697            <div class="large-5 columns home-img2 mobile-bg-remove hide-for-medium-down" data-equalizer-watch >
698             </div>
699            <div class="large-7 columns content-left-buffer second-section" data-equalizer-watch >
700                <h2>A Complete Suite of Roofing Services</h2>
701                <p>We provide a complete suite of services for all your roofing needs. From new construction projects to old home restorations, we can do it all. No matter the size of the job, you can count on us to see it done right. We can help with:</p>
702                <ul class="icon-list">
703                    <li>Roof repairs</li>
704                    <li>New roof construction</li>
705                    <li>Roof replacements</li>
706                    <li>Preventative maintenance</li>
707                    <li>Roofing inspections</li>
708                    <li>…and more</li>
709                </ul>
710                <p>We tailor our services according to each client using a thorough <strong>consultative process.</strong> As a roofing contractor, we take the time to get to know our clients. We take the time to learn about their needs, their wants, and their precise specifications. That way, we can provide a more personalized service experience based on their goals. Don’t hesitate to get started with us by contacting us today.</p>
711                <a href="https://g.page/r/CRLkTRtTG831EBM/review" target="_blank" rel="noreferrer noopener" title="Google Review"><img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2026/01/leave-us-a-google-review-button.png" alt="Leave A Google Review"></a>
712             </div>
713         </div>
714     </div>
715    <div class="vertical-padding-large side-buffer home-img3 red-bg-section">
716        <div class="row" data-equalizer >            
717            <div class="large-9 columns content-right-buffer vertical-padding-xs red-bg-content" data-equalizer-watch >
718                <h2>Why Choose Johnny C's Roofing’s Roofing Services?</h2>
719                <p>We are a local business with a passion for our work and a passion for customer service. We strive to deliver high-value solutions that save you time, money, and stress—all while giving you the best quality roofing available. Choose us, and we promise you the following:</p>
720                <ul class="icon-list">
721                    <li>On-time service</li>
722                    <li>Trained and qualified crew members</li>
723                    <li>Fast turnarounds</li>
724                    <li>Extended warranties</li>
725                    <li>Money-saving solutions</li>
726                </ul>
727                <h2>You’ll Love Our Local Roofing Services—Guaranteed</h2>
728                <p>We know our roofing work is second to none. We know that no one can match the value of our services, the quality of our craftsmanship, and the skill of our staff. In fact, we’re so confident in ourselves, that we offer a <strong>complete customer satisfaction guarantee.</strong> We’re not satisfied until we’ve done the job 100% correct and the customer is 100% satisfied.</p>
729                <p>Here at our business, our clients always come first. We make your satisfaction our top priority, and we’ll stop at nothing to achieve it. That’s our guarantee to you.</p>
730             </div>
731            <div class="large-3 columns home-img4 mobile-bg-remove" data-equalizer-watch >
732             </div>
733         </div>
734     </div>
735    <div class="vertical-padding-large side-buffer m-vpad-none">
736        <div class="row">
737            <div class="large-12 columns text-center">
738                <div class="large-4 medium-6 columns">
739                    <img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/sg.png" alt="Satisfaction Guaranteed" loading="lazy" width="300" height="250">
740                 </div>
741                <div class="large-4 medium-6 columns">
742                    <img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/bf.png" alt="Budget Friendly" loading="lazy" width="300" height="250">
743                 </div>
744                <div class="large-4 medium-6 columns end">
745                    <img src="https://johnnycsroofing.com/wp-content/uploads/sites/353/2025/03/calp.png" alt="Certified and Licensed Professional" loading="lazy" width="300" height="250">
746                 </div>
747             </div>
748         </div>
749     </div>
750    <div class="vertical-padding-x-large home-img5 side-buffer cta-wrapper">
751        <div class="row cta-row">
752            <div class="large-6 columns cta-box">
753                <h2>Johnny C's Roofing: <br>Your Top Choice for Quality Roofing</h2>
754                <h3>Get in Touch Today</h3>
755                <p>Professional, dependable, affordable—why wait? If you need quality work from a qualified roofer, we are the company to call. We’ve helped countless clients keep their property protected while saving time and money. We know we 
755can do the same for you too.</p>
756                <div class="cta-btn-holder top-padding-xs">
757                <a href="/contact-us/" title="Contact us to Get Started Today" class="cta-btn smaller-text">Contact us to get started today.</a>
758                 </div>
759             </div>
760         </div>
761     </div>
762 </article>
763</main><div class="clearfix"></div>
764<footer class="footer-wrapper">
765    <div class="content-wrapper side-buffer">
766        <div class="row footer-inner vertical-padding-medium">
767            <div class="large-3 columns footer-address">
768                <h2>Contact Info</h2>
769                <p>East Providence, RI 02914-4013</p>
770                <p>Phone: (401) 727-1324</p>
771                <p>Email: [email protected]</p>
772                <div class="large-12 columns strip-padding footer-hours">
773                    <p><strong>Mon - Fri: 8:00AM - 5:00PM</strong></p>
774                    <p><strong>Sat & Sun: By Appointment Only</strong></p>
775                    <p><strong>Emergency Services Available</strong></p>
776                 </div>
777             </div>
778            <div class="large-3 columns footer-payment text-center">
779                <h2>Payment Methods</h2>
780                <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Visa.png' title='Visa' alt='Visa payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Mastercard.png' title='Mastercard' alt='Mastercard payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/American-Express.png' title='American Express' alt='American Express payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Discover.png' title='Discover' alt='Discover payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Cash.png' title='Cash' alt='Cash payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Check.png' title='Check' alt='Check payment icon'> <img src='https://johnnycsroofing.com/wp-content/themes/rfr5/images/creditcards/Debit.png' title='Debit Card' alt='Debit Card payment icon'>
781             </div>
782            <div class="large-3 columns text-center strip-padding footer-social hide-if-no-social">
783                <h2>Follow Us</h2>
784                 
785                <a class="lnm-social-icon " href="https://www.facebook.com/JohnnyCsRoofing/" rel="noreferrer noopener" itemprop="sameAs" target="blank" title="Facebook"><i class="fa fa-facebook"></i></a> 
786                <a class="lnm-social-icon " href="https://www.google.com/maps?cid=17711842953272353810" rel="noreferrer noopener" itemprop="sameAs" target="blank" title="Google Maps"><i class="fa fa-map-marker"></i></a>
787             </div>
788            <div class="large-3 columns lnm-logo text-right">
789                <img src="https://linknow.com/linknow_images/linknow-logo-white.png" alt="Website Hosted By LinkNow™ Media" loading="lazy" width="200" height="75"/>
790             </div>
791         </div>
792     </div>
793</footer><div class="lnm-policies text-center lnm-policy-footer-links"><ul class="lnm-policy-useful-links"><li class="lnm-policy-list-item"><a href="https://johnnycsroofing.com/policy/privacy-policy/" class="lnm-policy-list-link">Privacy Policy</a></li></ul></div><style>.lnm-policies {background: white;}.lnm-policies li, .lnm-policies li.lnm-policy-list-item{display: inline-block;padding: 5px;}.lnm-policies a, .lnm-policies a.lnm-policy-list-link {color:#333333;}.lnm-policies ul.useful-links, .lnm-policies ul.lnm-policy-useful-links {color:#333333;}cmp-toolbar {display: inline-block !important;}@media (width <= 767px) {.lnm-policies { padding-bottom:100px;}}</style>
794
795<div class="slide-out-wrapper hide-for-medium-down" id="slide-out">
796    <span class="form-toggle"><span class="toggle-holder"><i class="toggle-left"></i></span></span>
797    <div class="slide-out-content">
798        <div class="slide-out-form">
799            <span class="form-title">Contact us now to get a free estimate</span>
800            <form id="contactForm" class="contactForm" method="POST">
801                <input type="hidden" name="submitContact">
802                <div class="groupWrapper">
803                    <label for="fullName">Enter your full name:</label>
804                    <input class="slideOutInput validate[required] shortField" type="text" name="fullName" id="fullName" title="Full Name">
805                </div>
806                <div class="groupWrapper">
807                    <label for="phoneNumber">Enter your phone number:</label>
808                    <input class="slideOutInput validate[required,custom[phone]]" type="text" name="phoneNumber" id="phoneNumber" title="Phone Number">
809                </div>
810                <div class="groupWrapper">
811                    <label for="emailAddress">Enter your email address:</label>
812                    <input class="slideOutInput validate[required,custom[emailAddress]]" type="text" name="emailAddress" id="emailAddress" title="Email Address">
813                </div>
814                <div class="groupWrapper">
815                    <label for="emailMessage">Enter your message:</label>
816                    <textarea class="validate[required]" type="text" name="emailMessage" id="emailMessage" title="Your Message"></textarea>
817                </div>
818                
819                
820                <div class="submitWrapper slideOut">            
821                    <button type="submit" class="submit right" name="submitContact" id="submitContact">SEND</button>
822                </div>
823            <input type="hidden" name="akismet_check" value="1"><input type="hidden" name="lnm_recaptcha" value="1"><input type="hidden" name="g-recaptcha-response" value=""></form>
824         </div>
825      
826     </div>
827
828 </div>
829<script type="speculationrules">
830{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/sites/353/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/rfr5/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
831</script>
vendor: 1 bytes, line 831
831
832<script type="text/javascript">!function(){ var b=function(){ window.__AudioEyeSiteHash = "6ad3adfd9efe28c4de221c391e8a149b"; var a=document.createElement("script"); a.src="https://wsmcdn.audioeye.com/aem.js"; a.type="text/javascript"; a.setAttribute("async",""); document.getElementsByTagName("body")[0].appendChild(a)}; "complete"!==document.readyState?window.addEventListener?window.addEventListener("load",b):window.attachEvent&&window.attachEvent("onload",b):b()}(); </script>
832
833<style>
834.lnmreviewform {
835	width: 750px;
836	max-width: 100%;
837	margin: 0 auto;
838}
839.lnmreviewform #lnmreviewtext {
840	min-height: 150px;
841}
842.lnmcr-review-card {
843	margin: 45px auto;
844	padding: 45px 45px 65px 45px;
845	border: 1px solid #CCCCCC;
846	width: 100%;
847	max-width: 750px;
848}
849.lnmcr-review-card-title h3 {
850	margin: 0 auto;
851
852	padding: 0 0 10px 0;
853}
854.lnmcr-review-card-rating {
855	color:#ffcc00;
856	width: 100%;
857	max-width: 165px;
858	font-size: 28px;
859	display: inline-block;
860	float: left;
861}
862.lnmcr-review-card-author {
863	display: inline-block;
864	float: right;
865	padding: 0 25px 0 0;
866
867}
868.lnmcr-review-card-text {
869	margin: 20px 0;
870}
871.lnmcr-review-card-author span {
872	text-transform: capitalize;
873	display: block;
874	position: relative;
875	font-style: italic;
876	font-weight: bold;
877}
878
879
880.lnmcr-review-card-author span::before {
881	content: "";
882	display: block;
883	width: 15px;
884	height: 1px;
885	background: #CCCCCC;
886	position: absolute;
887	top: 14px;
888	left: -25px;
889}
890
891.lnmcr-row {
892	padding-top: 45px;
893	padding-bottom: 45px;
894}
895.star-rating {
896  font-size: 40px;
897  padding: 0.25em 0.375em;
898  display: inline-flex;
899  flex-flow: row-reverse;
900
901  overflow: hidden;
902  border-radius: 0.75em;
903  background-color: white;
904}
905.star-rating input {
906	appearance:initial; 
907  cursor: pointer;
908  position: relative;
909  padding: 0;
910  width: 1em;
911  height: 1em;
912  float: left;
913  text-align: center;
914  line-height: 1em;
915}
916.star-rating input::before,
917.star-rating input::after {
918  display: block;
919  top: 0;
920  bottom: 0;
921  left: 0;
922  right: 0;
923  position: absolute;
924}
925.star-rating input::before {
926  content: "";
927  background-color: white;
928}
929.star-rating input::after {
930  content: "\2605";
931  color: #CCCCCC;
932-webkit-transition: color 0.2s ease;
933-moz-transition: color 0.2s ease;
934-ms-transition: color 0.2s ease;
935-o-transition: color 0.2s ease;
936transition: color 0.2s ease;
937}
938.star-rating input:checked::after,
939.star-rating input:checked ~ input::after {
940  color: #ffcc00;
941}
942input.hasError,
943textarea.hasError {
944	border-color: red;
945}
946input.lnmcr-input-error {
947	border: 1px solid red !important;
948}
949input.errorType-charlength {
950	box-shadow: 10px 5px 5px red;
951}
952
953input.error {
954	border: 1px solid red !important;	
955	/*box-shadow: 10px 5px 5px red;*/
956}
957
958.hasError.errorType-charlength::after {
959	/*content: "x";*/
960}
961.lnmreviewtextformError	{
962	display: none !important;
963}
964
965#lnmreviewform .review-error {
966	border: 1px solid red;
967}
968span.success-message {
969    background: #4BB543;
970    color: white;
971    padding: 15px;
972}
973span.error-message {
974    background: #D32F2F;
975    color: white;
976    padding: 15px;
977}
978
979
980
981
982#review-response-container i.fa-solid.fa-spinner.fa-spin-pulse {
983    font-size: 28px;
984}
985
986.lnmcr-review-pagination a,
987.lnmcr-review-pagination span.current {
988	/* padding: 5px 10px; */
989	background: none;
990	width: 30px;
991	height: 30px;
992	line-height: 26px;
993	margin: 0 2px 0 0;
994	border: 1px solid #CCCCCC;
995	display: inline-block;
996	font-size: 16px;
997}
998.lnmcr-review-pagination span.current {
999	background: #333;
1000	color: white;
1001}
1002.lnmcr-review-pagination a:hover {
1003	background: #333;
1004	color: white;	
1005}
1006input.review-error, textarea.review-error {
1007	margin-bottom: 0;
1008}
1009.review-error-container {
1010	display: none;
1011	padding: 10px;
1012	border-left: 1px solid red;
1013	border-bottom: ;
1014	border-bottom: 1px solid red;
1015	border-right: 1px solid red;
1016	margin-bottom: 25px;
1017	color: white;
1018	font-weight: bold;
1019	background: red;
1020}
1021
1022@media only screen and (max-width: 650px) {.lnmcr-review-card {max-width: 100%;}}
1023</style>
vendor: 104 bytes, lines 1023-1025
1023
1024
1025<script id="lnm-recaptcha-enterprise-js" src="https://www.google.com/recaptcha/enterprise.js?render=
10256LflbUQsAAAAADQa-oHKDxYnfKpy0TfaniKv449Y
vendor: 12 bytes, line 1025
1025"></script>
1026<script id="lnm-recaptcha-enterprise-js-after">
1027console.log('[LNM] recaptcha inline loaded');
1028
1029(function(){
1030  function ensureHidden(form){
1031    var el = form.querySelector('input[name="g-recaptcha-response"]');
1032    if(!el){
1033      el = document.createElement('input');
1034      el.type = 'hidden';
1035      el.name = 'g-recaptcha-response';
1036      form.appendChild(el);
1037    }
1038    return el;
1039  }
1040
1041document.addEventListener('click', function(e){
1042  var el = e.target.closest('#contactForm #submitContact, #contactForm .submit, #requestForm #submitContact');
1043  if(!el) return;
1044
1045  var form = el.closest('form');
1046  if(!form) return;
1047
1048  // trigger a real submit event path (lets other listeners run)
1049  e.preventDefault();
1050
1051  if (form.requestSubmit) {
1052    form.requestSubmit(); // preferred: dispatches submit event
1053  } else {
1054    // fallback for older browsers
1055    var evt = document.createEvent('Event');
1056    evt.initEvent('submit', true, true);
1057    if (form.dispatchEvent(evt)) {
1058      form.submit();
1059    }
1060  }
1061}, true);
1062
1063
1064
1065  document.addEventListener('submit', function(e){
1066    var form = e.target;
1067    if(!form || form.nodeName !== 'FORM') return;
1068
1069console.log('[LNM] submit captured', form);
1070
1071    // Only forms you explicitly mark in the HTML.
1072    if(!form.querySelector('input[name="lnm_recaptcha"][value="1"]')) return;
1073
1074    // Prevent infinite loop: after we inject a token once, allow the submit.
1075    if(form.dataset && form.dataset.lnmRecaptchaDone === '1') return;
1076
1077    var hidden = ensureHidden(form);
1078
1079    // If we already have a token, let it submit.
1080    if(hidden && hidden.value) {
1081      if(form.dataset) form.dataset.lnmRecaptchaDone = '1';
1082      return;
1083    }
1084
1085    // If grecaptcha isn't available, DO NOT block submission.
1086    // (Server-side enforce may still reject; but UX won't "freeze".)
1087    if(!window.grecaptcha || !grecaptcha.enterprise || !grecaptcha.enterprise.execute) {
1088      return;
1089    }
1090
1091    // From this point on, we are taking over submission.
1092    e.preventDefault();
1093
1094    var done = false;
1095
1096    function finishSubmit(){
1097      if(done) return;
1098      done = true;
1099      if(form.dataset) form.dataset.lnmRecaptchaDone = '1';
1100      form.submit();
1101    }
1102
1103    // Hard safety: never allow recaptcha to stall the UX.
1104    var timer = setTimeout(function(){
1105      finishSubmit(); // fallback: submit even if token never arrives
1106    }, 6000);
1107
1108    try {
1109      grecaptcha.enterprise.ready(function(){
1110        try {
1111          var p = grecaptcha.enterprise.execute('6LflbUQsAAAAADQa-oHKDxYnfKpy0TfaniKv449Y', {action: 'lnm_email_121901692'});
1112          if(p && typeof p.then === 'function'){
1113            p.then(function(token){
1114              clearTimeout(timer);
1115              hidden.value = token || '';
1116              finishSubmit();
1117            }).catch(function(){
1118              clearTimeout(timer);
1119              finishSubmit();
1120            });
1121          } else {
1122            clearTimeout(timer);
1123            finishSubmit();
1124          }
1125        } catch(err){
1126          clearTimeout(timer);
1127          finishSubmit();
1128        }
1129      });
1130    } catch(err){
1131      clearTimeout(timer);
1132      finishSubmit();
1133    }
1134  }, true);
1135})();
1136//# sourceURL=lnm-recaptcha-enterprise-js-after
1137</script>
vendor: 1 bytes, line 1137
1137
1138<script id="cookiejs-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/cookie-js.min.js"></script>
vendor: 1 bytes, line 1138
1138
1139<script id="lnmscripts-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/scripts/lnm-scripts.min.js"></script>
vendor: 1 bytes, line 1139
1139
1140<script id="slickjs-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/slick/slick.js"></script>
vendor: 1 bytes, line 1140
1140
1141<script id="equalizer-js" src="https://johnnycsroofing.com/wp-content/themes/rfr5/js/foundation/foundation.equalizer.js"></script>
vendor: 1 bytes, line 1141
1141
1142<script id="formjs-js" src="https://johnnycsroofing.com/wp-content/plugins/linknowmedia-email/scripts/compiled.js"></script>
vendor: 1 bytes, line 1142
1142
1143<script id="formjs-js-after">
1144(function () {
1145  function getForms() {
1146    return Array.prototype.slice.call(document.querySelectorAll('form.contactForm, form#contactForm'));
1147  }
1148
1149  function getKey(form) {
1150    var host = window.location.host || '';
1151    var path = window.location.pathname || '';
1152    var formId = form ? (form.id || 'contactForm') : 'contactForm';
1153    return 'lnm_form_retention:' + host + ':' + path + ':' + formId;
1154  }
1155
1156  function trackedNames() {
1157    return ['fullName', 'phoneNumber', 'emailAddress', 'emailMessage'];
1158  }
1159
1160  function saveForm(form) {
1161    if (!form || !window.sessionStorage) return;
1162
1163    var data = {};
1164    trackedNames().forEach(function (name) {
1165      var field = form.querySelector('[name="' + name + '"]');
1166      if (field) {
1167        data[name] = field.value || '';
1168      }
1169    });
1170
1171    try {
1172      sessionStorage.setItem(getKey(form), JSON.stringify(data));
1173    } catch (e) {}
1174  }
1175
1176  function restoreForm(form) {
1177    if (!form || !window.sessionStorage) return;
1178
1179    try {
1180      var raw = sessionStorage.getItem(getKey(form));
1181      if (!raw) return;
1182
1183      var data = JSON.parse(raw);
1184      if (!data || typeof data !== 'object') return;
1185
1186      trackedNames().forEach(function (name) {
1187        var field = form.querySelector('[name="' + name + '"]');
1188        if (!field) return;
1189
1190        if ((field.value || '') === '' && typeof data[name] !== 'undefined') {
1191          field.value = data[name];
1192        }
1193      });
1194    } catch (e) {}
1195  }
1196
1197  function clearForCurrentPage() {
1198    if (!window.sessionStorage) return;
1199
1200    getForms().forEach(function (form) {
1201      try {
1202        sessionStorage.removeItem(getKey(form));
1203      } catch (e) {}
1204    });
1205
1206    if (!getForms().length) {
1207      var host = window.location.host || '';
1208      var path = window.location.pathname || '';
1209      try {
1210        sessionStorage.removeItem('lnm_form_retention:' + host + ':' + path + ':contactForm');
1211      } catch (e) {}
1212    }
1213  }
1214
1215  document.addEventListener('DOMContentLoaded', function () {
1216    var retentionMeta = document.getElementById('lnm-form-retention-meta');
1217    var shouldRetain = retentionMeta && retentionMeta.getAttribute('data-retain-form') === '1';
1218
1219    if (!shouldRetain && retentionMeta) {
1220      clearForCurrentPage();
1221    }
1222
1223    getForms().forEach(function (form) {
1224      restoreForm(form);
1225
1226      trackedNames().forEach(function (name) {
1227        var field = form.querySelector('[name="' + name + '"]');
1228        if (!field) return;
1229
1230        field.addEventListener('input', function () {
1231          saveForm(form);
1232        });
1233
1234        field.addEventListener('change', function () {
1235          saveForm(form);
1236        });
1237      });
1238
1239      form.addEventListener('submit', function () {
1240        saveForm(form);
1241      }, true);
1242    });
1243  });
1244})();
1245//# sourceURL=formjs-js-after
1246</script>
vendor: 1 bytes, line 1246
1246
1247<script>
1248if (window.matchMedia("(max-width: 1024px)").matches) { // Apply only for screens <= 1024px
1249    const observer = new MutationObserver(() => {
1250        const cmpToolbar = document.querySelector('cmp-toolbar');
1251        if (cmpToolbar && cmpToolbar.shadowRoot) {
1252            const targetElement = cmpToolbar.shadowRoot.querySelector('#CMP_toolbar .text-primary-content');
1253            if (targetElement) {
1254                // Apply styles
1255                targetElement.style.position = 'fixed';
1256                targetElement.style.bottom = '135px';
1257                targetElement.style.left = '8px';
1258                targetElement.style.backgroundColor = '#333';
1259                targetElement.style.color = '#fff';
1260                // Disconnect the observer once the target element is styled
1261                observer.disconnect();
1262            }
1263        }
1264    });
1265
1266    // Start observing the DOM
1267    observer.observe(document.body, { childList: true, subtree: true });
1268}
1269var src = $("#captchaImage").attr("src");
1270var timestamp = new Date().getTime();
1271
1272// If the URL already has a nocache parameter, replace its value.
1273if (src.indexOf("nocache=") !== -1) {
1274    src = src.replace(/(nocache=)\d+/, "$1" + timestamp);
1275} else {
1276    // If not, append the nocache parameter.
1277    src += (src.indexOf('?') === -1 ? '?' : '&') + "nocache=" + timestamp;
1278}
1279$("#captchaImage").attr("src", src);
1280
1281</script>

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.