1<!DOCTYPE html> 2<html lang="en-US"> 3<head > 4<meta charset="UTF-8" /> 5<meta name="viewport" content="width=device-width, initial-scale=1" /> 6<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> 7<link rel="alternate" hreflang="en" href="https://www.contracttesting.com/proven-protocols/" /> 8<link rel="alternate" hreflang="fr" href="https://www.contracttesting.com/des-protocoles-prouves/?lang=fr" /> 9<link rel="alternate" hreflang="x-default" href="https://www.contracttesting.com/proven-protocols/" /> 10 11 <!-- This site is optimized with the Yoast SEO plugin v28.3 - https://yoast.com/product/yoast-seo-wordpress/ --> 12 <title>Proven Protocols - Contract Testing</title> 13 <meta name="description" content="Matrix Sciences Consumer Research utilizes proprietary technology and expert project management. Explore our refined protocols for product testing success." /> 14 <link rel="canonical" href="https://www.contracttesting.com/proven-protocols/" /> 15 <meta property="og:locale" content="en_US" /> 16 <meta property="og:type" content="article" /> 17 <meta property="og:title" content="Proven Protocols - Contract Testing" /> 18 <meta property="og:description" content="Matrix Sciences Consumer Research utilizes proprietary technology and expert project management. Explore our refined protocols for product testing success." /> 19 <meta property="og:url" content="https://www.contracttesting.com/proven-protocols/" /> 20 <meta property="og:site_name" content="Contract Testing" /> 21 <meta property="article:publisher" content="https://www.facebook.com/ContractTesting/" /> 22 <meta property="article:modified_time" content="2026-09-11T09:16:01+00:00" /> 23 <meta property="og:image" content="https://www.contracttesting.com/wp-content/uploads/2012/02/lifecycle.jpg" /> 24 <meta property="og:image:width" content="316" /> 25 <meta property="og:image:height" content="285" /> 26 <meta property="og:image:type" content="image/jpeg" /> 27 <meta name="twitter:card" content="summary_large_image" /> 28 <meta name="twitter:label1" content="Est. reading time" /> 29 <meta name="twitter:data1" content="2 minutes" /> 30
30<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.contracttesting.com\/proven-protocols\/","url":"https:\/\/www.contracttesting.com\/proven-protocols\/","name":"Proven Protocols - Contract Testing","isPartOf":{"@id":"https:\/\/www.contracttesting.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.contracttesting.com\/proven-protocols\/#primaryimage"},"image":{"@id":"https:\/\/www.contracttesting.com\/proven-protocols\/#primaryimage"},"thumbnailUrl":"https:\/\/www.contracttesting.com\/wp-content\/uploads\/2012\/02\/lifecycle.jpg","datePublished":"2012-02-17T15:37:31+00:00","dateModified":"2026-09-11T09:16:01+00:00","description":"Matrix Sciences Consumer Research utilizes proprietary technology and expert project management. Explore our refined protocols for product testing success.","breadcrumb":{"@id":"https:\/\/www.contracttesting.com\/proven-protocols\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.contracttesting.com\/proven-protocols\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.contracttesting.com\/proven-protocols\/#primaryimage","url":"https:\/\/www.contracttesting.com\/wp-content\/uploads\/2012\/02\/lifecycle.jpg","contentUrl":"https:\/\/www.contracttesting.com\/wp-content\/uploads\/2012\/02\/lifecycle.jpg","width":316,"height":285},{"@type":"BreadcrumbList","@id":"https:\/\/www.contracttesting.com\/proven-protocols\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.contracttesting.com\/"},{"@type":"ListItem","position":2,"name":"Proven Protocols"}]},{"@type":"WebSite","@id":"https:\/\/www.contracttesting.com\/#website","url":"https:\/\/www.contracttesting.com\/","name":"Contract Testing","description":"Proven Protocols. Superior Results.","publisher":{"@id":"https:\/\/www.contracttesting.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.contracttesting.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.contracttesting.com\/#organization","name":"Contract Testing","url":"https:\/\/www.contracttesting.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.contracttesting.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.contracttesting.com\/wp-content\/uploads\/2017\/03\/CTI_logo_black-1.png","contentUrl":"https:\/\/www.contracttesting.com\/wp-content\/uploads\/2017\/03\/CTI_logo_black-1.png","width":4098,"height":762,"caption":"Contract Testing"},"image":{"@id":"https:\/\/www.contracttesting.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ContractTesting\/","https:\/\/www.instagram.com\/contracttesting","https:\/\/www.linkedin.com\/company\/2857184\/"]}]}</script>
30 31 <!-- / Yoast SEO plugin. --> 32 33 34<link rel='dns-prefetch' href='//fonts.googleapis.com' /> 35<link rel='dns-prefetch' href='//code.ionicframework.com' /> 36<link href='https://fonts.gstatic.com' crossorigin rel='preconnect' /> 37<link rel="alternate" type="application/rss+xml" title="Contract Testing » Feed" href="https://www.contracttesting.com/feed/" /> 38<link rel="alternate" type="application/rss+xml" title="Contract Testing » Comments Feed" href="https://www.contracttesting.com/comments/feed/" /> 39<link rel="alternate" type="application/rss+xml" title="Contract Testing » Proven Protocols Comments Feed" href="https://www.contracttesting.com/proven-protocols/feed/" /> 40<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://www.contracttesting.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.contracttesting.com%2Fproven-protocols%2F" /> 41<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://www.contracttesting.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.contracttesting.com%2Fproven-protocols%2F&format=xml" /> 42<link rel="preload" href="https://www.contracttesting.com/wp-content/plugins/bb-plugin/fonts/fontawesome/7.2.0/webfonts/fa-solid-900.woff2" as="font" type="font/woff2" crossorigin="anonymous"> 43<link rel="preload" href="https://www.contracttesting.com/wp-content/plugins/bb-plugin/fonts/fontawesome/7.2.0/webfonts/fa-regular-400.woff2" as="font" type="font/woff2" crossorigin="anonymous"> 44<style id="wp-img-auto-sizes-contain-inline-css"> 45img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 46/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 47</style> 48<link rel='stylesheet' id='infinity-pro-css' href='https://www.contracttesting.com/wp-content/themes/infinity-pro/style.css?ver=1.0.0' media='all' /> 49<style id="infinity-pro-inline-css"> 50 51 52 a, 53 .entry-title a:focus, 54 .entry-title a:hover, 55 .featured-content .entry-meta a:hover, 56 .featured-content .entry-meta a:focus, 57 .front-page .genesis-nav-menu a:hover, 58 .front-page .genesis-nav-menu a:focus, 59 .front-page .offscreen-content-icon button:hover, 60 .front-page .offscreen-content-icon button:focus, 61 .front-page .white .genesis-nav-menu a:hover, 62 .front-page .white .genesis-nav-menu a:focus, 63 .genesis-nav-menu a:focus, 64 .genesis-nav-menu a:hover, 65 .genesis-nav-menu .current-menu-item > a, 66 .genesis-nav-menu .sub-menu .current-menu-item > a:focus, 67 .genesis-nav-menu .sub-menu .current-menu-item > a:hover, 68 .js nav button:focus, 69 .js .menu-toggle:focus, 70 .offscreen-content button:hover, 71 .offscreen-content-icon button:hover, 72 .site-footer a:hover, 73 .site-footer a:focus { 74 color: #d94f00; 75 } 76 77 button, 78 input[type="button"], 79 input[type="reset"], 80 input[type="select"], 81 input[type="submit"], 82 .button, 83 .enews-widget input:hover[type="submit"], 84 .footer-widgets .button:hover { 85 background-color: #d94f00; 86 } 87 88 89/*# sourceURL=infinity-pro-inline-css */ 90</style> 91<style id="wp-emoji-styles-inline-css"> 92 93 img.wp-smiley, img.emoji { 94 display: inline !important; 95 border: none !important; 96 box-shadow: none !important; 97 height: 1em !important; 98 width: 1em !important; 99 margin: 0 0.07em !important; 100 vertical-align: -0.1em !important; 101 background: none !important; 102 padding: 0 !important; 103 } 104/*# sourceURL=wp-emoji-styles-inline-css */ 105</style> 106<style id="wp-block-library-inline-css"> 107: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}
107: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;--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}} 108 109/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */ 110</style> 111<style id="classic-theme-styles-inline-css"> 112/*! This file is auto-generated */ 113.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 114/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 115</style> 116 117<style id="global-styles-inline-css"> 118: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,
1180) 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%);--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;}
118.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;} 119/*# sourceURL=global-styles-inline-css */ 120</style> 121 122<link rel='stylesheet' id='fl-builder-layout-13-css' href='https://www.contracttesting.com/wp-content/uploads/bb-plugin/cache/13-layout.css?ver=3b2d2c25c4a4a2f16ec2bdefd6b9be2f' media='all' /> 123<link rel='stylesheet' id='contact-form-7-css' href='https://www.contracttesting.com/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=6.1.7' media='all' /> 124<link rel='stylesheet' id='cookie-notice-front-css' href='https://www.contracttesting.com/wp-content/plugins/cookie-notice/css/front.min.css?ver=3.1.9' media='all' /> 125<link rel='stylesheet' id='wpml-legacy-horizontal-list-0-css' href='https://www.contracttesting.com/wp-content/plugins/sitepress-multilingual-cms/templates/language-switchers/legacy-list-horizontal/style.min.css?ver=1' media='all' /> 126<link rel='stylesheet' id='font-awesome-5-css' href='https://www.contracttesting.com/wp-content/plugins/bb-plugin/fonts/fontawesome/7.2.0/css/all.min.css?ver=2.11.0.3' media='all' /> 127<link rel='stylesheet' id='fl-builder-layout-bundle-b265b1380fb0f32cf8b9459f3a28c58b-css' href='https://www.contracttesting.com/wp-content/uploads/bb-plugin/cache/b265b1380fb0f32cf8b9459f3a28c58b-layout-bundle.css?ver=2.11.0.3-1.6' media='all' /> 128<link rel='stylesheet' id='infinity-fonts-css' href='//fonts.googleapis.com/css?family=Cormorant+Garamond:400,400i,700|Raleway:700|Merriweather+Sans|Muli&ver=1.0.0' media='all' /> 129<link rel='stylesheet' id='infinity-ionicons-css' href='//code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css?ver=1.0.0' media='all' /> 130<link rel='stylesheet' id='simple-social-icons-font-css' href='https://www.contracttesting.com/wp-content/plugins/simple-social-icons/css/style.css?ver=4.0.0' media='all' /> 131<link rel='stylesheet' id='pp-animate-css' href='https://www.contracttesting.com/wp-content/plugins/bbpowerpack/assets/css/animate.min.css?ver=3.5.1' media='all' /> 132<link rel='stylesheet' id='fl-builder-google-fonts-99ffaa26d28bd062f83cbc723d5c68ba-css' href='//fonts.googleapis.com/css?family=Raleway:700&ver=7.1' media='all' />
133<script id="wpml-cookie-js-extra"> 134var wpml_cookies = {"wp-wpml_current_language":{"value":"en","expires":1,"path":"/"}}; 135var wpml_cookies = {"wp-wpml_current_language":{"value":"en","expires":1,"path":"/"}}; 136//# sourceURL=wpml-cookie-js-extra 137</script>
vendor: 1 bytes, line 137
137
138<script data-wp-strategy="defer" defer id="wpml-cookie-js" src="https://www.contracttesting.com/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=497000"></script>
vendor: 1 bytes, line 138
138
139<script id="jquery-core-js" src="https://www.contracttesting.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 139
139
140<script id="jquery-migrate-js" src="https://www.contracttesting.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 140
140
141<script id="cookie-notice-front-js-before"> 142var cnArgs = {"ajaxUrl":"https:\/\/www.contracttesting.com\/wp-admin\/admin-ajax.php","nonce":"8c16efbee8","hideEffect":"fade","position":"bottom","onScroll":false,"onScrollOffset":100,"onClick":false,"cookieName":"cookie_notice_accepted","cookieTime":2592000,"cookieTimeRejected":2592000,"globalCookie":false,"redirection":false,"cache":true,"revokeCookies":false,"revokeCookiesOpt":"automatic"}; 143 144//# sourceURL=cookie-notice-front-js-before 145</script>
vendor: 1 bytes, line 145
145
146<script id="cookie-notice-front-js" src="https://www.contracttesting.com/wp-content/plugins/cookie-notice/js/front.min.js?ver=3.1.9"></script>
146 147<link rel="https://api.w.org/" href="https://www.contracttesting.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.contracttesting.com/wp-json/wp/v2/pages/13" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.contracttesting.com/xmlrpc.php?rsd" /> 148<meta name="generator" content="WordPress 7.1" /> 149<link rel='shortlink' href='https://www.contracttesting.com/?p=13' /> 150<meta name="generator" content="WPML ver:4.9.7 stt:1,4;" /> 151
151<script> 152 var bb_powerpack = { 153 version: '2.42.2', 154 getAjaxUrl: function() { return atob( 'aHR0cHM6Ly93d3cuY29udHJhY3R0ZXN0aW5nLmNvbS93cC1hZG1pbi9hZG1pbi1hamF4LnBocA==' ); }, 155 callback: function() {}, 156 mapMarkerData: {}, 157 post_id: '13', 158 search_term: '', 159 current_page: 'https://www.contracttesting.com/proven-protocols/', 160 conditionals: { 161 is_front_page: false, 162 is_home: false, 163 is_archive: false, 164 current_post_type: '', 165 is_tax: false, 166 is_author: false, 167 current_author: false, 168 is_search: false, 169 } 170 }; 171 </script>
171 172 173<!--BEGIN: TRACKING CODE MANAGER (v2.8.0) BY INTELLYWP.COM IN HEAD//-->
174<script type="text/javascript"> 175(function(a,e,c,f,g,h,b,d){var k={ak:"842018445",cl:"qf_qCJLl8HkQjd3AkQM",autoreplace:"905-456-0783"};a[c]=a[c]||function(){(a[c].q=a[c].q||[]).push(arguments)};a[g]||(a[g]=k.ak);b=e.createElement(h);b.async=1;b.src="//www.gstatic.com/wcm/loader.js";d=e.getElementsByTagName(h)[0];d.parentNode.insertBefore(b,d);a[f]=function(b,d,e){a[c](2,b,k,d,null,new Date,e)};a[f]()})(window,document,"_googWcmImpl","_googWcmGet","_googWcmAk","script"); 176</script>
vendor: 2 bytes, line 176
176
177<script type="text/javascript"> 178(function(a,e,c,f,g,h,b,d){var k={ak:"842018445",cl:"zbhDCMKq6HkQjd3AkQM",autoreplace:"1-800-342-1825"};a[c]=a[c]||function(){(a[c].q=a[c].q||[]).push(arguments)};a[g]||(a[g]=k.ak);b=e.createElement(h);b.async=1;b.src="//www.gstatic.com/wcm/loader.js";d=e.getElementsByTagName(h)[0];d.parentNode.insertBefore(b,d);a[f]=function(b,d,e){a[c](2,b,k,d,null,new Date,e)};a[f]()})(window,document,"_googWcmImpl","_googWcmGet","_googWcmAk","script"); 179</script>
179 180<!-- Google Tag Manager -->
181<script>
vendor: 331 bytes, lines 181-185
181(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 182new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 183j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 184'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 185})(window,document,'script','dataLayer','
185GTM-N4PL8Z9
vendor: 3 bytes, line 185
185');
185</script>
185 186<!-- End Google Tag Manager --> 187<!--END: https://wordpress.org/plugins/tracking-code-manager IN HEAD//--><link rel="pingback" href="https://www.contracttesting.com/xmlrpc.php" />
188<script> 189document.addEventListener( 'wpcf7mailsent', function( event ) { 190 location = 'https://www.contracttesting.com/contact-thank-you/'; 191}, false ); 192</script>
192<link rel="icon" href="https://www.contracttesting.com/wp-content/uploads/2020/03/cropped-Contract-Testing-Icon-32x32.png" sizes="32x32" /> 193<link rel="icon" href="https://www.contracttesting.com/wp-content/uploads/2020/03/cropped-Contract-Testing-Icon-192x192.png" sizes="192x192" /> 194<link rel="apple-touch-icon" href="https://www.contracttesting.com/wp-content/uploads/2020/03/cropped-Contract-Testing-Icon-180x180.png" /> 195<meta name="msapplication-TileImage" content="https://www.contracttesting.com/wp-content/uploads/2020/03/cropped-Contract-Testing-Icon-270x270.png" /> 196<style id="wp-custom-css"> 197img.fl-photo-img.wp-image-1929.size-full { 198 width: auto!important; 199} 200 201.fl-builder-content .fl-node-58d1936e7d503 a { 202 font-weight: 100!important; 203} 204 205.blog-featured-image { 206 height: 270px!important; 207} 208 209.button-black { 210border: 2px solid #d94f00 !important; 211color: #d94f00 !important; 212} 213 214.button-black:hover { 215background-color: #d94f00 !important; 216color: #fff !important; 217} 218 219.fl-menu a { 220color: #333333 !important; 221} 222 223.fl-menu a:hover { 224color: #d94f00 !important; 225} 226div.footer-width-fixer .fl-menu a { 227color: #d94f00 !important; 228} 229 230div.footer-width-fixer .fl-menu a:hover { 231color: #FAAF32 !important; 232} 233 234.button { 235/* border: 2px solid #d94f00 !important; */ 236 border: 2px solid #D14500 !important; 237} 238 239.button:hover { 240border: 2px solid #333 !important; 241} 242 243.gform_button { 244background-color: #d94f00 !important; 245} 246 247.gform_button:hover { 248background-color: #333333 !important; 249border: 2px solid #333333 !important; 250} 251 252p a { 253color: #d94f00 !important; 254} 255 256p a:hover { 257color: #FAAF32 !important; 258} 259 260.fl-accordion-button-label { 261color: #999999 !important; 262} 263 264.fl-accordion-small .fl-accordion-content li, .fl-accordion-small .fl-accordion-content body { 265color: #999999 !important; 266} 267 268/* Added 7-27-2026 */ 269/* .test { 270 filter: brightness(0.90) contrast(1.08); 271} */ 272 273/* .dred-text { 274 color: #f04123 !important; 275} 276 277.dred-bg { 278 background-color: #f04123 !important; 279} 280 281#header-row .fl-html a:nth-child(1) { 282 color: #f04123 !important; 283} 284 285 286#header-row .fl-html a:nth-child(2) { 287 border-color: #f04123 !important; 288 color: #f04123 !important; 289} 290 291#header-row .fl-html a:nth-child(3) { 292 color: #fff !important; 293 background-color: #f04123 !important; 294 border-color: #f04123; 295} 296 */ 297 298.fl-node-5890db70088f3 a, 299.fl-node-589b341e9da00 .fl-row-content-wrap, 300.fl-node-5ae9f508c4c74 .fl-node-content .fl-rich-text a, 301.fl-node-5ae9f508c4c74 p a, 302.fl-node-588fb66f4f8da .fl-button-has-icon a, 303.fl-node-content a, 304.fl-row-content-wrap, 305.search-form-submit, 306.entry-content p a { 307/* filter: brightness(0.90) contrast(1.08); */ 308 filter: contrast(1.08); 309} 310 311.fl-node-5890d91c41adf .fl-accordion-button a { 312 filter: contrast(1.08); 313} 314 315#header-row .fl-node-eobhiwq9y2u0 .fl-html a { 316 filter: contrast(1) !important; 317} 318 319/* .fl-button-wrap a, */ 320.fl-button-wrap i { 321 filter: brightness(1) contrast(1); 322} 323 324.fl-button-wrap a { 325 background: #D14500 !important; 326} 327 328/* accordion */ 329.fl-node-58d9634b804ef .pp-accordion-item span { 330 filter: contrast(1.05); 331} 332 333.fl-node-589b341e9da00 > .fl-row-content-wrap { 334/* background: #C74200; */ 335 background: #D14500; 336} 337 338#cn-notice-buttons button { 339/* background: #C74200 !important; */ 340 background: #D14500 !important; 341} 342 343.fl-node-58d15199f18c2 span, 344.fl-node-58d15199f18f7 span, 345.fl-node-58d153ab820e8 a, 346.fl-node-58d153ab820e8 a .fl-accordion-button-icon, 347.fl-node-58ff6f92c3199 a, 348.fl-node-58ff6f92c3199 a .fl-accordion-button-icon { 349 color: #707070 !important; 350} 351 352#menu-item-1993 .fl-has-submenu-container { 353 display: inline-block !important; 354} 355 356#menu-item-1993 .fl-has-submenu-container button { 357 position: absolute; 358 right: 0; 359 top: 50%; 360 height: 100%; 361 transform: translateY(-50%); 362} 363 364header { 365 position: relative; 366 z-index: 100; 367} 368 369.fl-node-wbl59rox74fn .fl-html a:nth-child(1) { 370 background: #D14500 !important; 371} 372 373.fl-node-wbl59rox74fn .fl-html a:nth-child(1):hover { 374 background: #222 !important; 375} 376 377.fl-node-wbl59rox74fn .fl-html a:nth-child(2) { 378 color: #D14500 !important; 379} 380 381.fl-node-wbl59rox74fn .fl-html a:nth-child(2):hover { 382 background: #D14500 !important; 383 color: #fff !important; 384 border: solid 2px #D14500 !important; 385} 386 387#francais a { 388 background: none !important; 389 color: #D14500 !important; 390} 391menu-footer-about-menu 392.fl-callout-title a, 393.fl-rich-text a, 394.fl-heading .fl-heading-text, 395#menu-footer-existing-tester-menu li a, 396#menu-footer-about-menu li a, 397.fl-callout-title-text { 398 color: #D14500 !important; 399} 400 401.menu-main-menu ul li a:focus-visible { 402 color: #D14500; 403/* color: #e1300f; */ 404} 405 406/* #F55100 */ 407.fl-node-bcqs2x5d6pwe .fl-heading .fl-heading-text, 408.fl-node-ftr0x62mdw79 .fl-heading .fl-heading-text, 409.fl-node-vdk6ngcwf3xl .fl-heading .fl-heading-text, 410.fl-node-1wkc5r0m2gnv .fl-heading .fl-heading-text 411{ 412 color: #F55100 !important; 413} 414 415#cn-close-notice { 416 width: 50px !important; 417 height: 50px !important; 418 min-width: 50px !important; 419 min-height: 50px !important; 420 padding: 0 !important; 421 box-sizing: border-box; 422} 423 424.fl-node-58d14cb0ac637 .fl-accordion-item ul { 425 margin: 0 0 0 1.6em; 426 list-style: none; 427} 428 429.fl-node-58d14cb0ac637 .fl-accordion-item ul li { 430 border-bottom: none; 431 color: #000 !important; 432 text-align: left !important; 433} 434 435.fl-node-58d14cb0ac637 .fl-accordion-item ul li p { 436 text-align: left; 437} 438 439.fl-node-58d14cb0ac637 .fl-accordion-item p, 440.fl-node-58d14cb0ac637 .fl-accordion-item ul li p { 441 margin-bottom: 0.8em; 442 color: #000; 443} 444 445 446/* .hidden-heading { 447 position: absolute !important; 448 width: 1px !important; 449 height: 1px !important; 450 padding: 0 !important; 451 margin: -1px !important; 452 overflow: hidden !important; 453 clip: rect(0, 0, 0, 0) !important; 454 white-space: nowrap !important; 455 border: 0 !important; 456} */ 457 458/* added 10-5-2026 */ 459 460</style>
461<link rel='stylesheet' id='fl-builder-wp-editor-css' href='https://www.contracttesting.com/wp-content/plugins/bb-plugin/css/build/wp-editor.bundle.min.css?ver=2.11.0.3' media='all' /> 462 463</head> 464<body class="wp-singular page-template page-template-page_full_width page-template-page_full_width-php page page-id-13 wp-theme-genesis wp-child-theme-infinity-pro fl-builder fl-builder-2-11-0-3 fl-themer-1-6 fl-no-js cookies-not-set fl-theme-builder-header fl-theme-builder-header-new-header fl-theme-builder-footer fl-theme-builder-footer-new-footer header-image header-full-width full-width-content genesis-breadcrumbs-hidden full-width"> 465<!--BEGIN: TRACKING CODE MANAGER (v2.8.0) BY INTELLYWP.COM IN BODY//--> 466<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 466-467
466 467<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
467GTM-N4PL8Z9
vendor: 84 bytes, line 467
467" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
468<!-- End Google Tag Manager (noscript) --> 469<!--END: https://wordpress.org/plugins/tracking-code-manager IN BODY//--><div class="site-container"><header class="fl-builder-content fl-builder-content-3017 fl-builder-global-templates-locked" data-post-id="3017" data-type="header" data-sticky="0" data-sticky-on="" data-sticky-breakpoint="medium" data-shrink="0" data-overlay="0" data-overlay-bg="transparent" data-shrink-image-height="50px" role="banner" itemscope="itemscope" itemtype="http://schema.org/WPHeader"><div id="header-row" class="fl-row fl-row-full-width fl-row-bg-none fl-node-378dfi0log2r fl-row-default-height fl-row-align-center" data-node="378dfi0log2r"> 470 <div class="fl-row-content-wrap"> 471 <div class="fl-row-content fl-row-full-width fl-node-content"> 472 473<div class="fl-col-group fl-node-wk532zsy7m96 fl-col-group-equal-height fl-col-group-align-center fl-col-group-custom-width" data-node="wk532zsy7m96"> 474 <div class="fl-col fl-node-f05ayon93dke fl-col-bg-color fl-col-small fl-col-small-custom-width" data-node="f05ayon93dke"> 475 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-photo fl-node-vc6lqmwp495z" data-node="vc6lqmwp495z" aria-label="Photo"> 476 <div class="fl-module-content fl-node-content"> 477 <div role="figure" class="fl-photo fl-photo-align-left" itemscope itemtype="https://schema.org/ImageObject"> 478 <div class="fl-photo-content fl-photo-img-png"> 479 <a href="https://www.contracttesting.com/" target="_self" itemprop="url"> 480 <img loading="lazy" decoding="async" class="fl-photo-img wp-image-2916 size-full" src="https://www.contracttesting.com/wp-content/uploads/2021/09/matrix_logo-retina.png" alt="Matrix Logo" height="118" width="226" title="matrix_logo-retina" data-no-lazy="1" itemprop="image" /> 481 </a> 482 </div> 483 </div> 484 </div> 485</div> 486</div> 487</div> 488 <div class="fl-col fl-node-mbe2oyz9tf5c fl-col-bg-color fl-col-small fl-col-small-custom-width" data-node="mbe2oyz9tf5c"> 489 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-menu fl-node-cut8jelrm42o main-menu" data-node="cut8jelrm42o" aria-label="Menu"> 490 <div class="fl-module-content fl-node-content"> 491 <div class="fl-menu fl-menu-responsive-toggle-mobile"> 492 <button class="fl-menu-mobile-toggle hamburger-label fl-content-ui-button" aria-haspopup="menu" aria-label="Menu"><span class="fl-menu-icon svg-container"><svg version="1.1" class="hamburger-menu" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> 493<rect class="fl-hamburger-menu-top" width="512" height="102"/> 494<rect class="fl-hamburger-menu-middle" y="205" width="512" height="102"/> 495<rect class="fl-hamburger-menu-bottom" y="410" width="512" height="102"/> 496</svg> 497</span><span class="fl-menu-mobile-toggle-label" aria-haspopup="menu" aria-label="Menu">Menu</span></button> <div class="fl-clear"></div> 498 <nav aria-label="Navigation Menu" itemscope="itemscope" itemtype="https://schema.org/SiteNavigationElement"><ul id="menu-main-menu" class="menu fl-menu-horizontal fl-toggle-arrows"><li id="menu-item-1993" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-ancestor current-menu-parent menu-item-has-children fl-has-submenu"><div class="fl-has-submenu-container"><a href="https://contracttesting.com">About</a><span class="fl-menu-toggle fl-content-ui-button" aria-label="About submenu toggle" role="button" tabindex="0" aria-control="sub-menu-1993" aria-expanded="false"></span></div><ul id="sub-menu-1993" class="sub-menu"> <li id="menu-item-883" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/services/">Services</a></li> <li id="menu-item-1996" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-13 current_page_item"><a href="https://www.contracttesting.com/proven-protocols/" aria-current="page">Proven Protocols</a></li> <li id="menu-item-1994" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/case-studies/">Case Studies</a></li> <li id="menu-item-1998" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/locations/">Locations</a></li></ul></li><li id="menu-item-3055" class="menu-item menu-item-type-custom menu-item-object-custom">
498<a href="https://connect.contracttesting.com/ctimvc/Account/Login?ReturnUrl=%2fctimvc&_gl=1*1k3cjn2*_ga*NjUyODQxODA1LjE3MTM5NjYxNTE.*_ga_MEH1LPRD52*MTcxNjQ4NDk5NS4xNC4wLjE3MTY0ODQ5OTkuMC4wLjA.">Login</a></li><li id="menu-item-3056" class="menu-item menu-item-type-custom menu-item-object-custom"><a href="https://connect.contracttesting.com/ctimvc/Account/Register?_gl=1*mn1o8q*_ga*NjUyODQxODA1LjE3MTM5NjYxNTE.*_ga_MEH1LPRD52*MTcxNjQ4ODAyMy4xNS4xLjE3MTY0ODgwNTQuMC4wLjA.">Register</a></li><li id="menu-item-3057" class="menu-item menu-item-type-custom menu-item-object-custom"><a href="https://www.contracttesting.com/?lang=fr">Francais</a></li><li id="menu-item-887" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/contact/">Contact</a></li></ul></nav></div> 499 </div> 500</div> 501</div> 502</div> 503 <div class="fl-col fl-node-wbl59rox74fn fl-col-bg-color fl-col-small" data-node="wbl59rox74fn"> 504 <div class="fl-col-content fl-node-content"><div id="naven" class="fl-module fl-module-html fl-node-eobhiwq9y2u0 fl-visible-desktop fl-visible-large fl-visible-medium" data-node="eobhiwq9y2u0" aria-label="HTML"> 505 <div class="fl-module-content fl-node-content"> 506 <div class="fl-html"> 507 <a style="float: right; margin-left: 10px;" class="button" href="http://connect.contracttesting.com/ctimvc/Account/Login?ReturnUrl=%2fctimv
507c">Login</a> 508 509<a style="float: right;margin-left: 10px;" class="button button-black" href="https://connect.contracttesting.com/ctimvc/Account/Register?">Become a Tester</a> 510<div style="display: inline-block; float: right;" id='francais'><a href="?lang=fr">FR</a></div></div> 511 </div> 512</div> 513</div> 514</div> 515 </div> 516 </div> 517 </div> 518</div> 519</header><div class="site-inner"><div class="content-sidebar-wrap"><main class="content"><article class="post-13 page type-page status-publish has-post-thumbnail entry" aria-label="Proven Protocols"><div class="entry-content"><div class="fl-builder-content fl-builder-content-13 fl-builder-content-primary fl-builder-global-templates-locked" data-post-id="13"><div class="fl-row fl-row-fixed-width fl-row-bg-photo fl-node-5ae9f8070053d fl-row-default-height fl-row-align-center" data-node="5ae9f8070053d"> 520 <div class="fl-row-content-wrap"> 521 <div class="fl-row-content fl-row-fixed-width fl-node-content"> 522 523<div class="fl-col-group fl-node-5ae9f8070323f" data-node="5ae9f8070323f"> 524 <div class="fl-col fl-node-5ae9f80703304 fl-col-bg-color" data-node="5ae9f80703304"> 525 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-photo fl-node-5ae9f9849d7e1" data-node="5ae9f9849d7e1" aria-label="Photo"> 526 <div class="fl-module-content fl-node-content"> 527 <div role="figure" class="fl-photo fl-photo-align-center" itemscope itemtype="https://schema.org/ImageObject"> 528 <div class="fl-photo-content fl-photo-img-png"> 529 <img loading="lazy" decoding="async" class="fl-photo-img wp-image-1924 size-full" src="https://www.contracttesting.com/wp-content/uploads/2018/05/Proven-Protocols-Header.png" alt="Row of cleaning supplies, paper rolls, a burger, fries, donuts, wine, coffee, and chocolate." height="200" width="1000" itemprop="image" srcset="https://www.contracttesting.com/wp-content/uploads/2018/05/Proven-Protocols-Header.png 1000w, https://www.contracttesting.com/wp-content/uploads/2018/05/Proven-Protocols-Header-300x60.png 300w, https://www.contracttesting.com/wp-content/uploads/2018/05/Proven-Protocols-Header-768x154.png 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /> 530 </div> 531 </div> 532 </div> 533</div> 534</div> 535</div> 536 </div> 537 </div> 538 </div> 539</div> 540<div class="fl-row fl-row-fixed-width fl-row-bg-none fl-node-58e66cb990d32 fl-row-default-height fl-row-align-center" data-node="58e66cb990d32"> 541 <div class="fl-row-content-wrap"> 542 <div class="fl-row-content fl-row-fixed-width fl-node-content"> 543 544<div class="fl-col-group fl-node-58e66cb9916c5" data-node="58e66cb9916c5"> 545 <div class="fl-col fl-node-58e66cb991908 fl-col-bg-color fl-col-has-cols" data-node="58e66cb991908"> 546 <div class="fl-col-content fl-node-content"> 547<div class="fl-col-group fl-node-58e66cc7525f4 fl-col-group-nested" data-node="58e66cc7525f4"> 548 <div class="fl-col fl-node-58e66cc752861 fl-col-bg-color fl-col-small" data-node="58e66cc752861"> 549 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-heading fl-node-58e66d16ad818" data-node="58e66d16ad818" aria-label="Heading"> 550 <div class="fl-module-content fl-node-content"> 551 <h1 class="fl-heading"> 552 <span class="fl-heading-text">Proven Protocols</span> 553 </h1> 554 </div> 555</div> 556<div class="fl-module fl-module-rich-text fl-node-58e66cb993191" data-node="58e66cb993191" aria-label="Text Editor"> 557 <div class="fl-module-content fl-node-content"> 558 <div class="fl-rich-text"> 559 <h2>1. The RIGHT processes, standards and controls</h2> 560<p>From beginning to end, every step in our product research process has been documented and is rigorously adhered to. Each step is subjected to pre-established standards and controls. This ensures that all research is completed in accordance with our specifications and established industry standards.</p> 561<h2>2. The RIGHT people</h2> 562<p>You have access to our superior team of sensory trained project managers, fieldwork technicians and data analysts across the United States and Canada. They, along with our knowledgeable and experienced technical administrators and support personnel, ensure that your projects are well designed and properly executed, and
562your results are properly analyzed and consulted on.</p> 563<h2>3. The RIGHT technology</h2> 564<p>MSCR is an acknowledged industry leader for its use of proprietary technology to enhance the speed and accuracy of the research process. We have developed our own automated, online recruiting system, our own data capture system as well as our own automated reporting system and we rely extensively on technology solutions for database development and project management.</p> 565<p>Our Proven Protocols have been continuously refined to reflect the latest advances in product research—and the input of our clients.</p> 566</div> 567 </div> 568</div> 569</div> 570</div> 571 <div class="fl-col fl-node-58e66cc75289d fl-col-bg-color fl-col-small" data-node="58e66cc75289d"> 572 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-heading fl-node-58e66ce5a6fd4" data-node="58e66ce5a6fd4" aria-label="Heading"> 573 <div class="fl-module-content fl-node-content"> 574 <h2 class="fl-heading"> 575 <span class="fl-heading-text">MSCR Project Success Life Cycle</span> 576 </h2> 577 </div> 578</div> 579<div class="fl-module fl-module-photo fl-node-58e66cd1923ee" data-node="58e66cd1923ee" aria-label="Photo"> 580 <div class="fl-module-content fl-node-content"> 581 <div role="figure" class="fl-photo fl-photo-align-center" itemscope itemtype="https://schema.org/ImageObject"> 582 <div class="fl-photo-content fl-photo-img-png"> 583 <img loading="lazy" decoding="async" class="fl-photo-img wp-image-2755 size-full" src="https://www.contracttesting.com/wp-content/uploads/2020/03/Wheel-English-600.png" alt="7-step circular process diagram for Superior Products, from Project Initiation to Analysis." height="600" width="600" itemprop="image" srcset="https://www.contracttesting.com/wp-content/uploads/2020/03/Wheel-English-600.png 600w, https://www.contracttesting.com/wp-content/uploads/2020/03/Wheel-English-600-300x300.png 300w, https://www.contracttesting.com/wp-content/uploads/2020/03/Wheel-English-600-150x150.png 150w, https://www.contracttesting.com/wp-content/uploads/2020/03/Wheel-English-600-75x75.png 75w" sizes="auto, (max-width: 600px) 100vw, 600px" /> 584 </div> 585 </div> 586 </div> 587</div> 588</div> 589</div> 590 </div> 591</div> 592</div> 593 </div> 594 </div> 595 </div> 596</div> 597</div></div></article></main></div></div><footer class="fl-builder-content fl-builder-content-3027 fl-builder-global-templates-locked" data-post-id="3027" data-type="footer" itemscope="itemscope" itemtype="http://schema.org/WPFooter"><div class="fl-row fl-row-full-width fl-row-bg-color fl-node-pw5gr3aqboxv fl-row-default-height fl-row-align-center" data-node="pw5gr3aqboxv"> 598 <div class="fl-row-content-wrap"> 599 <div class="fl-row-content fl-row-fixed-width fl-node-content"> 600 601<div class="fl-col-group fl-node-6hwgupo8vs03" data-node="6hwgupo8vs03"> 602 <div class="fl-col fl-node-bcqs2x5d6pwe fl-col-bg-color fl-col-small" data-node="bcqs2x5d6pwe"> 603 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-heading fl-node-ylx6zns0bgjm" data-node="ylx6zns0bgjm" aria-label="Heading"> 604 <div class="fl-module-content fl-node-content"> 605 <h2 class="fl-heading"> 606 <span class="fl-heading-text">Matrix Sciences Consumer Research</span> 607 </h2> 608 </div> 609</div> 610<div class="fl-module fl-module-rich-text fl-node-5dkm1zn9w6vo" data-node="5dkm1zn9w6vo" aria-label="Text Editor"> 611 <div class="fl-module-content fl-node-content"> 612 <div class="fl-rich-text"> 613 <p>Formerly Contract Testing (CTI), Matrix Sciences Consumer Research is a product research company, connecting companies who want their products tested by real consumers. We are an industry leader, working with major brand names, and have been in business for more than 30 years.</p> 614<p><a href="https://matrixsciences.com/" target="_blank" rel="noopener"><img decoding="async" src="https://www.contracttesting.com/wp-content/uploads/2020/03/MatrixSciences-Logo-Light.png" alt="Matrix Sciences Logo" /></a></p> 615</div> 616 </div> 617</div> 618</div> 619</div> 620 <div class="fl-col fl-node-69brlm12ty5k fl-col-bg-color fl-col-small" data-node="69brlm12ty5k"> 621 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-heading fl-node-ftr0x62mdw79" data-node="ftr0x62mdw79" aria-label="Heading"> 622 <div class="fl-module-content fl-node-content"> 623 <h2 class="fl-heading"> 624 <span class="fl-heading-text">About</span> 625 </h2> 626 </div> 627</div> 628<div class="fl-module fl-module-menu fl-node-ufobipys1nzh footer-width-fixer" data-node="ufobipys1nzh" aria-label="Menu"> 629 <div class="fl-module-content fl-node-content"> 630 <div class="fl-menu"> 631 <div class="fl-clear"></div> 632 <nav aria-label="Navigation Menu" itemscope="itemscope" itemtype="https://schema.org/SiteNavigationElement"><ul id="menu-footer-about-menu" class="menu fl-menu-vertical fl-toggle-none"><li id="menu-item-1093" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/services/">Services</a></li><li id="menu-item-1064" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-13 current_page_item"><a href="https://www.contracttesting.com/proven-protocols/" aria-current="page">Proven Protocols</a></li><li id="menu-item-1063" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/associations/">Associations</a></li><li id="menu-item-1066" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/locations/">Locations</a></li><li id="menu-item-1182" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/case-studies/">Case Studies</a></li></ul></nav></div> 633 </div> 634</div> 635</div> 636</div> 637 <div class="fl-col fl-node-jlmvnoka7fq1 fl-col-bg-color fl-col-small" data-node="jlmvnoka7fq1"> 638 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-heading fl-node-vdk6ngcwf3xl" data-node="vdk6ngcwf3xl" aria-label="Heading"> 639 <div class="fl-module-content fl-node-content"> 640 <h2 class="fl-heading"> 641 <span class="fl-heading-text">Testers</span> 642 </h2> 643 </div> 644</div> 645<div class="fl-module fl-module-menu fl-node-btmxjzcd9ur7 footer-width-fixer" data-node="btmxjzcd9ur7" aria-label="Menu"> 646 <div class="fl-module-content fl-node-content"> 647 <div class="fl-menu"> 648 <div class="fl-clear"></div> 649 <nav aria-label="Navigation Menu" itemscope="itemscope" itemtype="https://schema.org/SiteNavigationElement"><ul id="menu-footer-existing-tester-menu" class="menu fl-menu-vertical fl-toggle-none"><li id="menu-item-1072" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home"><a href="https://www.contracttesting.com/">Become a Tester</a></li><li id="menu-item-1090" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/tester/faq/">FAQ</a></li><li id="menu-item-1068" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/tester/i-am-a-tester-now-what/">I am a Tester… Now What?</a></li><li id="menu-item-1070" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/tester/terms-conditions/">Terms & Conditions</a></li><li id="menu-item-1081" class="menu-item menu-item-type-custom menu-item-object-custom">
649<a href="http://connect.contracttesting.com/ctimvc/Account/Login">Login</a></li></ul></nav></div> 650 </div> 651</div> 652</div> 653</div> 654 <div class="fl-col fl-node-pne8iv0b4yft fl-col-bg-color fl-col-small" data-node="pne8iv0b4yft"> 655 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-heading fl-node-1wkc5r0m2gnv" data-node="1wkc5r0m2gnv" aria-label="Heading"> 656 <div class="fl-module-content fl-node-content"> 657 <h2 class="fl-heading"> 658 <span class="fl-heading-text">Contact Us</span> 659 </h2> 660 </div> 661</div> 662<div class="fl-module fl-module-rich-text fl-node-wz4mky7ehst6" data-node="wz4mky7ehst6" aria-label="Text Editor"> 663 <div class="fl-module-content fl-node-content"> 664 <div class="fl-rich-text"> 665 <p>119 West Drive<br /> 666Brampton, ON L6T 2J6<br /> 667Canada</p> 668<p>2776 Birchcrest Drive SE<br /> 669Grand Rapids, MI 49506<br /> 670United States</p> 671<p><a href="https://www.contracttesting.com/locations/">All locations</a></p> 672<p><strong>+1 (866) 297-3486</strong></p> 673<p>For more information <a href="mailto:[email protected]">[email protected]</a></p> 674</div> 675 </div> 676</div> 677</div> 678</div> 679 </div> 680 </div> 681 </div> 682</div> 683<div class="fl-row fl-row-full-width fl-row-bg-color fl-node-dh3gsv941kec fl-row-default-height fl-row-align-center" data-node="dh3gsv941kec"> 684 <div class="fl-row-content-wrap"> 685 <div class="fl-row-content fl-row-fixed-width fl-node-content"> 686 687<div class="fl-col-group fl-node-8uad971m2hxr" data-node="8uad971m2hxr"> 688 <div class="fl-col fl-node-n1rc0em5j9ip fl-col-bg-color" data-node="n1rc0em5j9ip"> 689 <div class="fl-col-content fl-node-content"><div class="fl-module fl-module-menu fl-node-b9ywtlp3a1v2" data-node="b9ywtlp3a1v2" aria-label="Menu"> 690 <div class="fl-module-content fl-node-content"> 691 <div class="fl-menu"> 692 <div class="fl-clear"></div> 693 <nav aria-label="Navigation Menu" itemscope="itemscope" itemtype="https://schema.org/SiteNavigationElement"><ul id="menu-footer-menu" class="menu fl-menu-horizontal fl-toggle-none"><li id="menu-item-2936" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home"><a href="https://www.contracttesting.com/">Home</a></li><li id="menu-item-2377" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/contact/cookie-policy/">Cookie Policy</a></li><li id="menu-item-907" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/contact/privacy-policy/">Privacy Policy</a></li><li id="menu-item-1100" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.contracttesting.com/contact/">Contact</a></li><li id="menu-item-1045" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home"><a href="https://www.contracttesting.com/">Become a Tester</a></li><li id="menu-item-906" class="menu-item menu-item-type-custom menu-item-object-custom"><a href="http://connect.contracttesting.com/ctimvc/Account/Login">Login</a></li></ul></nav></div> 694 </div> 695</div> 696<div class="fl-module fl-module-rich-text fl-node-8q7us9l0m5i4" data-node="8q7us9l0m5i4" aria-label="Text Editor"> 697 <div class="fl-module-content fl-node-content"> 698 <div class="fl-rich-text"> 699 <p style="text-align: center;"><span style="color: #ffffff;">Copyright 2026 Matrix Sciences</span></p> 700</div> 701 </div> 702</div> 703<div class="fl-module fl-module-pp-social-icons fl-node-9wjgcsr512il" data-node="9wjgcsr512il" aria-label="Social Icons"> 704 <div class="fl-module-content fl-node-content"> 705 706<div class="pp-social-icons pp-social-icons-horizontal"> 707 <span class="pp-social-icon" itemscope itemtype="https://schema.org/Organization"> 708 <link itemprop="url" href="https://www.contracttesting.com"> 709 <a itemprop="sameAs" href="https://www.facebook.com/ContractTesting" target="_blank" title="Facebook" aria-label="Facebook" role="button" rel="noopener noreferrer external" > 710 <i class="fab fa-facebook"></i> 711 </a> 712 </span> 713 <span class="pp-social-icon" itemscope itemtype="https://schema.org/Organization"> 714 <link itemprop="url" href="https://www.contracttesting.com"> 715 <a itemprop="sameAs" href="https://www.instagram.com/contracttesting/" target="_blank" title="Instagram" aria-label="Instagram" role="button" rel="noopener noreferrer external" > 716 <i class="fab fa-instagram"></i> 717 </a> 718 </span> 719 <span class="pp-social-icon" itemscope itemtype="https://schema.org/Organization"> 720 <link itemprop="url" href="https://www.contracttesting.com"> 721 <a itemprop="sameAs" href="https://www.linkedin.com/company/contract-testing-inc-/" target="_blank" title="LinkedIn" aria-label="LinkedIn" role="button" rel="noopener noreferrer external" > 722 <i class="fab fa-linkedin"></i> 723 </a> 724 </span> 725 </div> 726 </div> 727</div> 728</div> 729</div> 730 </div> 731 </div> 732 </div> 733</div> 734</footer></div>
734<script type="speculationrules"> 735{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/infinity-pro/*","/wp-content/themes/genesis/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 736</script>
736 737<style type="text/css" media="screen"></style>
737<script id="fl-builder-layout-13-js" src="https://www.contracttesting.com/wp-content/uploads/bb-plugin/cache/13-layout.js?ver=a4b8b92fbaf5c99389ddb2a18f32b2e1"></script>
vendor: 1 bytes, line 737
737
738<script id="wp-hooks-js" src="https://www.contracttesting.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 738
738
739<script id="wp-i18n-js" src="https://www.contracttesting.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 739
739
740<script id="wp-i18n-js-after"> 741wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); 742//# sourceURL=wp-i18n-js-after 743</script>
vendor: 1 bytes, line 743
743
744<script id="swv-js" src="https://www.contracttesting.com/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1.7"></script>
vendor: 1 bytes, line 744
744
745<script id="contact-form-7-js-before"> 746var wpcf7 = { 747 "api": { 748 "root": "https:\/\/www.contracttesting.com\/wp-json\/", 749 "namespace": "contact-form-7\/v1" 750 }, 751 "cached": 1 752}; 753//# sourceURL=contact-form-7-js-before 754</script>
vendor: 1 bytes, line 754
754
755<script id="contact-form-7-js" src="https://www.contracttesting.com/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1.7"></script>
vendor: 1 bytes, line 755
755
756<script id="imagesloaded-js" src="https://www.contracttesting.com/wp-content/plugins/bb-plugin/js/libs/jquery.imagesloaded.min.js?ver=2.11.0.3"></script>
vendor: 1 bytes, line 756
756
757<script id="jquery-throttle-js" src="https://www.contracttesting.com/wp-content/plugins/bb-plugin/js/libs/jquery.ba-throttle-debounce.min.js?ver=2.11.0.3"></script>
vendor: 1 bytes, line 757
757
758<script id="fl-builder-layout-bundle-0043f8ea5d7ce8de61873fbaf8e88b77-js" src="https://www.contracttesting.com/wp-content/uploads/bb-plugin/cache/0043f8ea5d7ce8de61873fbaf8e88b77-layout-bundle.js?ver=2.11.0.3-1.6"></script>
vendor: 1 bytes, line 758
758
759<script async data-wp-strategy="async" fetchpriority="low" id="comment-reply-js" src="https://www.contracttesting.com/wp-includes/js/comment-reply.min.js?ver=7.1"></script>
vendor: 1 bytes, line 759
759
760<script id="hoverIntent-js" src="https://www.contracttesting.com/wp-includes/js/hoverIntent.min.js?ver=1.10.2"></script>
vendor: 1 bytes, line 760
760
761<script id="superfish-js" src="https://www.contracttesting.com/wp-content/themes/genesis/lib/js/menu/superfish.min.js?ver=1.7.10"></script>
vendor: 1 bytes, line 761
761
762<script id="superfish-args-js" src="https://www.contracttesting.com/wp-content/themes/genesis/lib/js/menu/superfish.args.min.js?ver=3.6.2"></script>
vendor: 1 bytes, line 762
762
763<script id="wp-emoji-settings" type="application/json"> 764{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://www.contracttesting.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1"}} 765</script>
vendor: 1 bytes, line 765
765
766<script type="module"> 767/*! This file is auto-generated */ 768var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); 769//# sourceURL=https://www.contracttesting.com/wp-includes/js/wp-emoji-loader.min.js 770</script>
770 771
771<script> 772 document.addEventListener('DOMContentLoaded', function () { 773 774 const caseStudyLabels = { 775 'Lemonade_v3-web-FINAL-1.pdf': 'Download Lemonade Case Study brochure (PDF)', 776 'Apple-Juice-Case-Study.pdf': 'Download Apple Juice Case Study brochure (PDF)', 777 'Milk-Chocolate-v2-web.pdf': 'Download Milk Chocolate Case Study brochure (PDF)' 778 }; 779 780 document.querySelectorAll('a[href*=".pdf"]').forEach(function (link) { 781 782 const href = link.getAttribute('href'); 783 784 if (!href) { 785 return; 786 } 787 788 Object.keys(caseStudyLabels).forEach(function (pdf) { 789 790 if (href.indexOf(pdf) !== -1) { 791 792 // Replace the existing aria-label. 793 link.setAttribute( 794 'aria-label', 795 caseStudyLabels[pdf] 796 ); 797 798 } 799 800 }); 801 802 }); 803 804 }); 805 </script>
805 806
806<script> 807 (function () { 808 function fixAriaControl() { 809 document.querySelectorAll('.fl-menu-toggle[aria-control]').forEach(function (button) { 810 var target = button.getAttribute('aria-control'); 811 812 if (target) { 813 button.setAttribute('aria-controls', target); 814 button.removeAttribute('aria-control'); 815 } 816 }); 817 } 818 819 // Run when the page loads. 820 document.addEventListener('DOMContentLoaded', fixAriaControl); 821 822 // Catch Beaver Builder/dynamic menu changes. 823 var observer = new MutationObserver(function () { 824 fixAriaControl(); 825 }); 826 827 observer.observe(document.documentElement, { 828 childList: true, 829 subtree: true 830 }); 831 })(); 832 833 834// another aria fixes 835 836 (function () { 837 'use strict'; 838 839 function fixAccessibility() { 840 841 /* 842 * FIX 1: 843 * Remove invalid aria-label attributes 844 * from non-interactive Beaver Builder modules. 845 */ 846 document.querySelectorAll( 847 '.fl-module-video[aria-label], .fl-module-separator[aria-label]' 848 ).forEach(function (element) { 849 element.removeAttribute('aria-label'); 850 }); 851 852 853 /* 854 * FIX 2: 855 * Prevent nested interactive controls 856 * in Beaver Builder accordion buttons. 857 */ 858 document.querySelectorAll( 859 '.fl-accordion-button[role="button"]' 860 ).forEach(function (container) { 861 862 var innerButton = container.querySelector( 863 'a[role="button"], button' 864 ); 865 866 if (!innerButton) { 867 return; 868 } 869 870 /* 871 * Move aria-controls from the parent 872 * to the actual interactive element. 873 */ 874 var ariaControls = container.getAttribute('aria-controls'); 875 876 if (ariaControls) { 877 innerButton.setAttribute( 878 'aria-controls', 879 ariaControls 880 ); 881 } 882 883 /* 884 * Remove interactive attributes 885 * from the parent container. 886 */ 887 container.removeAttribute('role'); 888 container.removeAttribute('tabindex'); 889 container.removeAttribute('aria-controls'); 890 }); 891 } 892 893 894 /* 895 * Initialize the accessibility fixes. 896 */ 897 function initAccessibilityFixes() { 898 899 fixAccessibility(); 900 901 /* 902 * Watch for Beaver Builder changes. 903 */ 904 var accessibilityObserver = new MutationObserver(function () { 905 fixAccessibility(); 906 }); 907 908 accessibilityObserver.observe(document.body, { 909 childList: true, 910 subtree: true 911 }); 912 } 913 914 915 /* 916 * Start when DOM is ready. 917 */ 918 if (document.readyState === 'loading') { 919 920 document.addEventListener( 921 'DOMContentLoaded', 922 initAccessibilityFixes 923 ); 924 925 } else { 926 927 initAccessibilityFixes(); 928 929 } 930 931 })(); 932 933// fix for unecessary aria-label in photo 934 // Remove aria-label="Photo" from Beaver Builder photo modules 935 document.querySelectorAll('.fl-module-photo[aria-label="Photo"]') 936 .forEach(function(element) { 937 element.removeAttribute('aria-label'); 938 }); 939 940 // Remove aria-label="Map" from Beaver Builder map modules 941 document.querySelectorAll('.fl-module-map[aria-label="Map"]') 942 .forEach(function(element) { 943 element.removeAttribute('aria-label'); 944 }); 945 </script>
945 946
946<script> 947(function () { 948 'use strict'; 949 950 /* 951 * ========================================== 952 * GENERAL HELPERS 953 * ========================================== 954 */ 955 956 function generateId(prefix) { 957 return prefix + '-' + Math.random().toString(36).substring(2, 10); 958 } 959 960 961 /* 962 * ========================================== 963 * REMOVE INVALID YOUTUBE ARIA-LEVEL 964 * ========================================== 965 */ 966 967 function removeAriaLevel() { 968 969 document 970 .querySelectorAll('.ytmVideoInfoVideoTitle[aria-level]') 971 .forEach(function (element) { 972 element.removeAttribute('aria-level'); 973 }); 974 975 } 976 977 978 /* 979 * ========================================== 980 * FAQ / LOCATION ACCORDION ACCESSIBILITY 981 * ========================================== 982 * 983 * Beaver Builder continues to control the 984 * actual accordion opening/closing. 985 * 986 * We only add: 987 * - role="button" 988 * - tabindex="0" 989 * - aria-expanded 990 * - aria-controls 991 * - keyboard support 992 */ 993 994 995 function getAccordionState(item, panel) { 996 997 /* 998 * Beaver Builder commonly uses fl-active 999 * on the accordion item. 1000 */ 1001 if (item.classList.contains('fl-active')) { 1002 return true; 1003 } 1004 1005 /* 1006 * Check the panel's aria-hidden state. 1007 */ 1008 if (panel.getAttribute('aria-hidden') === 'false') { 1009 return true; 1010 } 1011 1012 /* 1013 * Check the computed display state. 1014 * 1015 * This is safer than checking panel.style.display 1016 * because CSS may control the display property. 1017 */ 1018 var style = window.getComputedStyle(panel); 1019 1020 return style.display !== 'none'; 1021 } 1022 1023 1024 function updateAccordionAccessibility(item) { 1025 1026 var label = item.querySelector('.fl-accordion-button-label'); 1027 var button = item.querySelector('.fl-accordion-button'); 1028 var panel = item.querySelector('.fl-accordion-content'); 1029 1030 if (!label || !panel) { 1031 return; 1032 } 1033 1034 1035 /* 1036 * Make sure the accordion panel has an ID. 1037 */ 1038 if (!panel.id) { 1039 panel.id = generateId('accordion-panel'); 1040 } 1041 1042 1043 /* 1044 * The visible FAQ/location text acts as 1045 * the accessible button. 1046 */ 1047 label.setAttribute('role', 'button'); 1048 label.setAttribute('tabindex', '0'); 1049 1050 /* 1051 * Remove invalid heading ARIA. 1052 */ 1053 label.removeAttribute('aria-level'); 1054 1055 1056 /* 1057 * Connect the button to the panel. 1058 */ 1059 label.setAttribute('aria-controls', panel.id); 1060 1061 1062 /* 1063 * Determine current open/closed state. 1064 */ 1065 var isOpen = getAccordionState(item, panel); 1066 1067 1068 /* 1069 * Update aria-expanded. 1070 */ 1071 label.setAttribute( 1072 'aria-expanded', 1073 isOpen ? 'true' : 'false' 1074 ); 1075 1076 1077 /* 1078 * If Beaver Builder's actual accordion 1079 * button exists, keep it synchronized. 1080 */ 1081 if (button) { 1082 1083 button.setAttribute( 1084 'aria-expanded', 1085 isOpen ? 'true' : 'false' 1086 ); 1087 1088 } 1089 1090 } 1091 1092 1093 /* 1094 * Update all accordions. 1095 */ 1096 function updateAllAccordions() { 1097 1098 document 1099 .querySelectorAll('.fl-accordion-item') 1100 .forEach(function (item) { 1101 1102 updateAccordionAccessibility(item); 1103 1104 }); 1105 1106 } 1107 1108 1109 /* 1110 * Keyboard support for FAQ accordion. 1111 * 1112 * Enter / Space: 1113 * Opens/closes the accordion by triggering 1114 * Beaver Builder's own click behavior. 1115 * 1116 * Escape: 1117 * Closes the accordion. 1118 */ 1119 function initAccordionKeyboard() { 1120 1121 document 1122 .querySelectorAll('.fl-accordion-button-label') 1123 .forEach(function (label) { 1124 1125 if (label.dataset.accessibilityInitialized === 'true') { 1126 return; 1127 } 1128 1129 label.dataset.accessibilityInitialized = 'true'; 1130 1131 1132 label.addEventListener('keydown', function (event) { 1133 1134 var item = label.closest('.fl-accordion-item'); 1135 1136 if (!item) { 1137 return; 1138 } 1139 1140 1141 /* 1142 * ENTER 1143 */ 1144 if (event.key === 'Enter') { 1145 1146 event.preventDefault(); 1147 1148 /*
1149 * Trigger Beaver Builder's actual 1150 * accordion button. 1151 */ 1152 var button = item.querySelector( 1153 '.fl-accordion-button' 1154 ); 1155 1156 if (button) { 1157 button.click(); 1158 } 1159 1160 return; 1161 } 1162 1163 1164 /* 1165 * SPACE 1166 */ 1167 if (event.key === ' ') { 1168 1169 event.preventDefault(); 1170 1171 var button = item.querySelector( 1172 '.fl-accordion-button' 1173 ); 1174 1175 if (button) { 1176 button.click(); 1177 } 1178 1179 return; 1180 } 1181 1182 1183 /* 1184 * ESCAPE 1185 */ 1186 if (event.key === 'Escape') { 1187 1188 event.preventDefault(); 1189 1190 var button = item.querySelector( 1191 '.fl-accordion-button' 1192 ); 1193 1194 /* 1195 * Only click if the accordion is open. 1196 */ 1197 if ( 1198 item.classList.contains('fl-active') && 1199 button 1200 ) { 1201 button.click(); 1202 } 1203 1204 label.focus(); 1205 1206 } 1207 1208 }); 1209 1210 1211 /* 1212 * Keep aria-expanded synchronized after 1213 * Beaver Builder processes a click. 1214 */ 1215 label.addEventListener('click', function () { 1216 1217 setTimeout(function () { 1218 1219 updateAccordionAccessibility( 1220 label.closest('.fl-accordion-item') 1221 ); 1222 1223 }, 50); 1224 1225 }); 1226 1227 }); 1228 1229 } 1230 1231 1232 /* 1233 * ========================================== 1234 * MENU SUBMENU TOGGLES 1235 * ========================================== 1236 */ 1237 1238 function convertToggleSpansToButtons() { 1239 1240 document 1241 .querySelectorAll('.fl-menu .fl-menu-toggle') 1242 .forEach(function (toggle) { 1243 1244 /* 1245 * Already a button. 1246 */ 1247 if (toggle.tagName.toLowerCase() === 'button') { 1248 return; 1249 } 1250 1251 1252 /* 1253 * Only convert spans. 1254 */ 1255 if (toggle.tagName.toLowerCase() !== 'span') { 1256 return; 1257 } 1258 1259 1260 var button = document.createElement('button'); 1261 1262 1263 /* 1264 * Copy attributes. 1265 */ 1266 Array.from(toggle.attributes).forEach(function (attr) { 1267 1268 button.setAttribute( 1269 attr.name, 1270 attr.value 1271 ); 1272 1273 }); 1274 1275 1276 /* 1277 * Native button. 1278 */ 1279 button.setAttribute('type', 'button'); 1280 1281 1282 /* 1283 * Remove obsolete ARIA. 1284 */ 1285 button.removeAttribute('role'); 1286 button.removeAttribute('tabindex'); 1287 1288 1289 /* 1290 * Preserve icon/content. 1291 */ 1292 button.innerHTML = toggle.innerHTML; 1293 1294 1295 /* 1296 * Replace span. 1297 */ 1298 toggle.replaceWith(button); 1299 1300 }); 1301 1302 } 1303 1304 1305 /* 1306 * Add accessibility to navigation. 1307 */ 1308 function addMenuAccessibility() { 1309 1310 /* 1311 * Navigation links. 1312 */ 1313 document 1314 .querySelectorAll('.fl-menu a') 1315 .forEach(function (link) { 1316 1317 var text = link.textContent.trim(); 1318 1319 if (!link.id) { 1320 link.id = generateId('menu-link'); 1321 } 1322 1323 if ( 1324 !link.hasAttribute('aria-label') && 1325 text 1326 ) { 1327 link.setAttribute( 1328 'aria-label', 1329 text + ' page' 1330 ); 1331 } 1332 1333 }); 1334 1335 1336 /* 1337 * Submenu items. 1338 */ 1339 document 1340 .querySelectorAll( 1341 '.fl-menu .menu-item-has-children' 1342 ) 1343 .forEach(function (item) { 1344 1345 var link = item.querySelector(':scope > a'); 1346 var submenu = item.querySelector( 1347 ':scope > .sub-menu' 1348 ); 1349 var toggle = item.querySelector( 1350 ':scope > .fl-menu-toggle' 1351 ); 1352 1353 1354 if (!link || !submenu || !toggle) { 1355 return; 1356 } 1357 1358 1359 /* 1360 * Give submenu an ID. 1361 */ 1362 if (!submenu.id) { 1363 submenu.id = generateId('submenu'); 1364 } 1365 1366 1367 /* 1368 * Must be a button. 1369 */ 1370 if ( 1371 toggle.tagName.toLowerCase() !== 'button' 1372 ) { 1373 return; 1374 } 1375 1376 1377 /* 1378 * ARIA connection. 1379 */ 1380 toggle.setAttribute( 1381 'aria-controls', 1382 submenu.id 1383 ); 1384 1385 1386 /* 1387 * Default state. 1388 */ 1389 if (!toggle.hasAttribute('aria-expanded')) { 1390 1391 toggle.setAttribute( 1392 'aria-expanded', 1393 'false' 1394 ); 1395 1396 } 1397 1398 1399 /* 1400 * Accessible name. 1401 */ 1402 var linkText = link.textContent.trim(); 1403 1404 if ( 1405 linkText && 1406 !toggle.hasAttribute('aria-label') 1407 ) { 1408 1409 toggle.setAttribute( 1410 'aria-label', 1411 'Toggle ' + linkText + ' submenu' 1412 ); 1413 1414 } 1415 1416 1417 /* 1418 * Prevent duplicate listeners. 1419 */ 1420 if ( 1421 toggle.dataset.accessibilityInitialized === 1422 'true' 1423 ) { 1424 return; 1425 } 1426 1427 1428 toggle.dataset.accessibilityInitialized = 'true'; 1429 1430 1431 /* 1432 * Escape should close the submenu. 1433 * 1434 * IMPORTANT: 1435 * Do NOT manually set display:none. 1436 * 1437 * Let Beaver Builder handle the 1438 * actual menu state. 1439 */ 1440 toggle.addEventListener( 1441 'keydown', 1442 function (event) { 1443 1444 if (event.key === 'Escape') { 1445 1446 event.preventDefault(); 1447 1448 /* 1449 * Trigger the existing toggle. 1450 */ 1451 if ( 1452 toggle.getAttribute( 1453 'aria-expanded' 1454 ) === 'true' 1455 ) { 1456 toggle.click(); 1457 } 1458 1459 toggle.focus(); 1460 1461 } 1462 1463 } 1464 ); 1465 1466 1467 /* 1468 * Synchronize aria-expanded after click. 1469 */ 1470 toggle.addEventListener( 1471 'click', 1472 function () { 1473 1474 setTimeout(function () { 1475 1476 var expanded = 1477 item.classList.contains( 1478 'fl-active' 1479 ) || 1480 item.classList.contains( 1481 'open' 1482 ) || 1483 submenu.classList.contains( 1484 'open' 1485 ); 1486 1487 toggle.setAttribute( 1488 'aria-expanded', 1489 expanded 1490 ? 'true' 1491 : 'false' 1492 ); 1493 1494 }, 100); 1495 1496 } 1497 ); 1498 1499 }); 1500 1501 } 1502 1503 1504 /* 1505 * ========================================== 1506 * INITIALIZATION 1507 * ========================================== 1508 */ 1509 1510 function initAccessibility() { 1511 1512 removeAriaLevel(); 1513 1514 convertToggleSpansToButtons(); 1515 1516 addMenuAccessibility(); 1517 1518 updateAllAccordions(); 1519 1520 initAccordionKeyboard(); 1521 1522 } 1523 1524 1525 /* 1526 * ========================================== 1527 * DOM READY 1528 * ========================================== 1529 */ 1530 1531 if (document.readyState === 'loading') { 1532 1533 document.addEventListener( 1534 'DOMContentLoaded', 1535 initAccessibility 1536 ); 1537 1538 } else { 1539 1540 initAccessibility(); 1541 1542 } 1543 1544 1545 /* 1546 * ========================================== 1547 * MUTATION OBSERVER 1548 * ========================================== 1549 * 1550 * Only watch for newly added elements. 1551 * 1552 * We deliberately DO NOT watch attributes 1553 * such as aria-expanded or style because our 1554 * own accessibility changes would trigger 1555 * the observer repeatedly. 1556 */ 1557 1558 var observerTimeout; 1559 1560 var timedObserver = new MutationObserver( 1561 function (mutations) { 1562 1563 var shouldUpdate = false;
1564 1565 mutations.forEach(function (mutation) { 1566 1567 if (mutation.addedNodes.length > 0) { 1568 shouldUpdate = true; 1569 } 1570 1571 }); 1572 1573 1574 if (!shouldUpdate) { 1575 return; 1576 } 1577 1578 1579 clearTimeout(observerTimeout); 1580 1581 1582 observerTimeout = setTimeout( 1583 function () { 1584 1585 initAccessibility(); 1586 1587 }, 1588 100 1589 ); 1590 1591 } 1592 ); 1593 1594 1595 timedObserver.observe( 1596 document.documentElement, 1597 { 1598 childList: true, 1599 subtree: true 1600 } 1601 ); 1602 1603 1604 /* 1605 * ========================================== 1606 * ACCORDION STATE OBSERVER 1607 * ========================================== 1608 * 1609 * Separate observer for Beaver Builder's 1610 * accordion class/state changes. 1611 */ 1612 1613 var accordionObserver = 1614 new MutationObserver( 1615 function (mutations) { 1616 1617 var shouldUpdate = false; 1618 1619 mutations.forEach(function (mutation) { 1620 1621 if ( 1622 mutation.type === 'attributes' && 1623 ( 1624 mutation.attributeName === 'class' || 1625 mutation.attributeName === 'style' || 1626 mutation.attributeName === 'aria-hidden' 1627 ) 1628 ) { 1629 shouldUpdate = true; 1630 } 1631 1632 }); 1633 1634 1635 if (!shouldUpdate) { 1636 return; 1637 } 1638 1639 1640 /* 1641 * Wait until Beaver Builder finishes 1642 * its open/close animation. 1643 */ 1644 setTimeout( 1645 updateAllAccordions, 1646 50 1647 ); 1648 1649 } 1650 ); 1651 1652 1653 document 1654 .querySelectorAll('.fl-accordion') 1655 .forEach(function (accordion) { 1656 1657 accordionObserver.observe( 1658 accordion, 1659 { 1660 subtree: true, 1661 attributes: true, 1662 attributeFilter: [ 1663 'class', 1664 'style', 1665 'aria-hidden' 1666 ] 1667 } 1668 ); 1669 1670 }); 1671 1672 1673// Remove unecessary aria 1674 1675 1676 function fixAccordionAria() { 1677 document.querySelectorAll('.fl-accordion-button').forEach(function (button) { 1678 1679 // Remove aria-expanded from the parent div 1680 button.removeAttribute('aria-expanded'); 1681 1682 }); 1683 } 1684 1685 // Run immediately 1686 fixAccordionAria(); 1687 1688 // Watch for Beaver Builder/plugin changes 1689 const ariaRemoveObserver = new MutationObserver(function () { 1690 fixAccordionAria(); 1691 }); 1692 1693 ariaRemoveObserver.observe(document.documentElement, { 1694 childList: true, 1695 subtree: true, 1696 attributes: true, 1697 attributeFilter: ['aria-expanded'] 1698 }); 1699 1700 1701 1702 function updateFrenchLanguageLink() { 1703 const frenchLink = document.querySelector('#francais a'); 1704 1705 if (frenchLink) { 1706 frenchLink.setAttribute('lang', 'fr'); 1707 frenchLink.setAttribute('hreflang', 'fr'); 1708 } 1709 } 1710 1711 updateFrenchLanguageLink(); 1712 1713 const frenchObserver = new MutationObserver(updateFrenchLanguageLink); 1714 1715 frenchObserver.observe(document.documentElement, { 1716 childList: true, 1717 subtree: true 1718 }); 1719 1720 1721 1722// Unique navigation Aria Labels 1723 1724 function updateNavLabels() { 1725 1726 const navMappings = [ 1727 { 1728 selector: '.main-menu nav', 1729 label: 'Main Navigation' 1730 }, 1731 { 1732 selector: '.fl-node-ufobipys1nzh nav', 1733 label: 'About Navigation' 1734 }, 1735 { 1736 selector: '.fl-node-btmxjzcd9ur7 nav', 1737 label: 'Testers Navigation' 1738 } 1739 ]; 1740
1741 navMappings.forEach(function (item) { 1742 document.querySelectorAll(item.selector).forEach(function (nav) { 1743 1744 // Only update if needed 1745 if (nav.getAttribute('aria-label') !== item.label) { 1746 nav.setAttribute('aria-label', item.label); 1747 } 1748 1749 }); 1750 }); 1751 } 1752 1753 // Run immediately 1754 updateNavLabels(); 1755 1756 // Watch for Beaver Builder or AJAX changes 1757 const navigationObserver = new MutationObserver(function () { 1758 updateNavLabels(); 1759 }); 1760 1761 navigationObserver.observe(document.documentElement, { 1762 childList: true, 1763 subtree: true, 1764 attributes: true, 1765 attributeFilter: ['aria-label'] 1766 }); 1767 1768 1769})(); 1770 1771 document.addEventListener('DOMContentLoaded', function () { 1772 const closeButton = document.getElementById('cn-close-notice'); 1773 1774 if (closeButton) { 1775 closeButton.setAttribute('aria-label', 'Dismiss cookie notice.'); 1776 } 1777}); 1778 1779 1780</script>
1780 1781 1782 <!-- Cookie Compliance for WordPress (formerly Compliance by Hu-manity.co) plugin v3.1.9 https://cookie-compliance.co/ --> 1783 <div id="cookie-notice" role="dialog" class="cookie-notice-hidden cookie-revoke-hidden cn-position-bottom" aria-label="Cookie Compliance" style="background-color: rgba(0,0,0,0.8);"><div class="cookie-notice-container" style="color: #fff"><span id="cn-notice-text" class="cn-text-container">We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.</span><span id="cn-notice-buttons" class="cn-buttons-container"><button id="cn-accept-cookie" data-cookie-set="accept" class="cn-set-cookie cn-button cn-button-custom button" aria-label="Ok">Ok</button><button data-link-url="https://www.contracttesting.com/proven-protocols/" data-link-target="_blank" id="cn-more-info" class="cn-more-info cn-button cn-button-custom button" aria-label="Cookie policy">Cookie policy</button></span><button type="button" id="cn-close-notice" data-cookie-set="accept" class="cn-close-icon" aria-label="No" tabindex="0"></button></div> 1784 1785 </div> 1786 <!-- / Cookie Compliance for WordPress plugin --></body></html> 1787 1788<!-- 1789Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin 1790 1791Page Caching using Disk: Enhanced 1792 1793Served from: www.contracttesting.com @ 2026-10-05 17:44:26 by W3 Total Cache 1794-->
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.