1<!DOCTYPE html> 2<html> 3<head> 4 5 <title>Reaction Injection Moulding | PU Moulding | Midas Pattern</title> 6<meta content="Midas Pattern Company Ltd" name="og:site_name" /> 7<meta content="website" name="og:type" /> 8<meta content="Midas Pattern is an award-winning, Precision Polyurethane Moulding Company. Get in touch to learn more about how we manufacture and supply PU RIM Mouldings." name="description" /> 9<link href="https://midaspattern.co.uk/" rel="canonical" /> 10 11 12 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 13 <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 14 15 <meta name="google-site-verification" content="vidoyXXTvmDktmjoQ2TuKeQU1pU9fIhXdIv4rPrOqyM" /> 16 <meta name="google-site-verification" content="sukwbbGYzvV3kCHvarNhoS5UFUYG3Q3uhhXQ45260AI" /> 17 18 <link rel="preconnect" href="https://fonts.googleapis.com"> 19 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 20 <link href="https://fonts.googleapis.com/css2?family=Geist+Mono:[email protected]&display=swap" rel="stylesheet"> 21 22 <link href="https://db.onlinewebfonts.com/c/28bdd7eadeb5206e61223b647fbf747b?family=Aspekta+550" rel="stylesheet"> 23 24 25 26 <link href="/virtual/bundles/all-styles?v=15z68e5VAvZ3WJ1IOGJgzs6Deng_RIvqySOQJJTMkxk1" rel="stylesheet"/> 27 28
28<script src="/virtual/bundles/head-scripts?v=UKIk9QIF-mGa8uesuFk5cuDWPmoZwpHQoAZySIcUb_Y1"></script>
28 29 30 31 32 33
33<script> 34 window.dataLayer = window.dataLayer || []; 35 function gtag() { dataLayer.push(arguments); } 36 37 // apply cookie choices on page load and whenever user's preferences change 38 cookieConsent.apply = function () { 39 40 var hasAnalytical = cookieConsent.has('Analytical'); 41 42 if (typeof gtag !== 'undefined') { 43 var gtagValue = hasAnalytical ? 'granted' : 'denied'; 44 gtag('consent', 'update', { 45 'analytics_storage': gtagValue, 46 'ad_storage': gtagValue, 47 'ad_user_data': gtagValue, 48 'ad_personalization': gtagValue 49 }); 50 } 51 52 if (typeof fbq !== 'undefined') 53 fbq('consent', hasAnalytical ? 'grant' : 'revoke'); 54 55 }; 56 cookieConsent.apply(); 57 </script>
57 58 59
59<script> 60 (function (w, d, s, l, i) { 61 w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], 62 j = d.createElement(s), dl = l !== 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 63 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 64 })(window, document, 'script', 'dataLayer', 'GTM-TFFDKGT'); 65 </script>
65 66 67 68
68<script type="text/javascript" src="https://secure.dawn3host.com/js/209125.js"></script>
68 69</head> 70<body>
vendor: 77 bytes, lines 70-72
70 71 72 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
72GTM-TFFDKGT
vendor: 88 bytes, lines 72-74
72" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 73 74
74<noscript><img alt="" src="https://secure.dawn3host.com/209125.png" style="display:none;" /></noscript> 75 76 <!-- main body --> 77 <section class="f-content"> 78 79 80 <header class="site-header"> 81 <div class="site-header-container"> 82 <div class="logo"> 83 <a href="/"><img src="/Images/logo.png" /></a> 84 </div> 85 <div class="links"> 86 <div class="link-container"> 87 <a href="/services">Services</a> 88 <div class="dropdown"> 89 <div class="dropdown-inner"> 90 <div class="dropdown-col"> 91 <a class="dropdown-col__title" href="/services/production-pu-mouldings">Production PU Mouldings</a> 92 <ul> 93 <li><a href="/services/production-pu-mouldings/mrim-tooling">MRIM⢠Tooling</a></li> 94 <li><a href="/services/production-pu-mouldings/design-for-manufacture">MRIM⢠Design for Manufacture</a></li> 95 <li><a href="/services/production-pu-mouldings/flame-retardant-materials">Flame Retardant Materials</a></li> 96 <li><a href="/services/production-pu-mouldings/rfi-shield-coat">RFI / EMC Shield Coating</a></li> 97 <li><a href="/services/production-pu-mouldings/finishing">Finishing / Painting / Screen Printing</a></li> 98 <li><a href="/services/production-pu-mouldings/product-assembly">Product Assembly</a></li> 99 </ul> 100 </div> 101 <div class="dropdown-col"> 102 <a class="dropdown-col__title" href="/services/prototype-mouldings">Prototype PU Mouldings</a> 103 <ul> 104 <li><a href="/services/prototype-mouldings/fastrim-tooling">FASTrimâ¢</a></li> 105 <li><a href="/services/prototype-mouldings/design-for-manufacture">FASTrim⢠Design for Manufacture</a></li> 106 <li><a href="/services/prototype-mouldings/flame-retardant-materials">Flame Retardant Materials</a></li> 107 <li><a href="/services/prototype-mouldings/rfi-shield-coat">RFI / EMC Shield Coating</a></li> 108 <li><a href="/services/prototype-mouldings/finishing">Finishing / Painting / Screen Printing </a></li> 109 <li><a href="/services/prototype-mouldings/product-assembly">Product Assembly</a></li> 110 </ul> 111 </div> 112 <div class="dropdown-col"> 113 <a class="dropdown-col__title" href="/services/model-making">Rapid Turnaround Modelmaking</a> 114 <ul> 115 <li><a href="/services/model-making/block-model">CNC Block Model</a></li> 116 <li><a href="/services/model-making/cnc-wallsection">CNC Wall Thickness</a></li> 117 <li><a href="/services/model-making/full-engineering-solution">Full Engineering Solution</a></li> 118 <li><a href="/services/model-making/finishing">Finishing</a></li> 119 </ul> 120 </div> 121 <div class="dropdown-col"> 122 <a class="dropdown-col__title" href="/services/tool-making">Pattern & Tool Making Services</a> 123 <ul> 124 <li><a href="/services/tool-making/foundry-pattern-making">Foundry Pattern Making</a></li> 125 <li><a href="/services/tool-making/cnc-cadcam">CNC / CAD / CAM / CAE</a></li> 126 <li><a href="/services/tool-making/rotational-toolmaking">Rotational Toolmaking</a></li> 127 <li><a href="/services/tool-making/jigs-amp-fixtures">Jigs & Fixtures</a></li> 128 </ul> 129 </div> 130 </div> 131 </div> 132 </div> 133 <div class="link-container"> 134 <a href="/markets">Markets</a> 135 <div class="dropdown dropdown--grid"> 136 <div class="dropdown-inner"> 137 <a class="dropdown-grid__link" href="/markets/medical">Medical</a> 138 <a class="dropdown-grid__link" href="/markets/medtec-devices">MEDTEC & Analytical Devices</a> 139 <a class="dropdown-grid__link" href="/markets/green-market">Green </a> 140 <a class="dropdown-grid__link" href="/markets/metrology">Metrology</a> 141 <a class="dropdown-grid__link" href="/markets/aerospace">Aerospace</a> 142 <a class="dropdown-grid__link" href="/markets/automotive">Automotive</a> 143 <a class="dropdown-grid__link" href="/markets/broadcasting">Broadcasting / Video / Audio</a> 144 <a class="dropdown-grid__link" href="/markets/consumer">Consumer</a> 145 <a class="dropdown-grid__link" href="/markets/environmental">Environmental & Solar</a> 146 <a class="dropdown-grid__link" href="/markets/lifestyle">Lifestyle</a> 147 <a class="dropdown-grid__link" href="/markets/marine-transportation">Marine & Transportation</a> 148 <a class="dropdown-grid__link" href="/markets/beauty">Beauty</a> 149 <a class="dropdown-grid__link" href="/markets/finishing-assembly">Finishing & Assembly</a> 150 </div> 151 </div> 152 </div> 153 <div class="link-container"> 154 <a href="/case-studies">Case Studies</a> 155 </div> 156 <div class="link-container"> 157 <a style="color: #94c11e" href="/green-initiative">Green Initiative</a> 158 </div> 159 <div class="link-container"> 160 <a href="/about">About</a> 161 <div class="dropdown dropdown--grid"> 162 <div class="dropdown-inner"> 163 <a class="dropdown-grid__link" href="/about/overview">Midas Overview</a> 164 <a class="dropdown-grid__link" href="/about/history">History</a> 165 <a class="dropdown-grid__link" href="/about/accreditations">Accreditations</a> 166 <a class="dropdown-grid__link" href="/about/faqs">FAQ's</a> 167 <a class="dropdown-grid__link" href="/about/careers">Careers</a> 168 169 <a class="dropdown-grid__link" href="/news-and-midas-insights">News & Midas Insights</a> 170 </div> 171 </div> 172 </div> 173 <div class="link-container"> 174 <a href="/contact">Contact</a> 175 </div> 176 177 178 <a class="pill-btn white" href="/contact">Request a Quote</a> 179 <a class="pill-btn orange hide-for-large" href="#" onclick="document.getElementById('mobile-menu').classList.toggle('is-open');document.getElementById('mobile-menu-overlay').classList.toggle('is-open');return false;"><i class="fat fa-bars"></i></a> 180 181 </div> 182 183 </div> 184 </header> 185 186 <section class="off-canvas-content" data-off-canvas-content> 187 188 189 190 <component data-id="6"> 191 192 193 194<section class="component two-block-banner"> 195 <div class="two-block-banner-container section-container"> 196 <div class="left-panel tile"> 197 <div class="vimeo-wrapper" style="background-image:url('/Content/Images/84f1a06c8271e43245932202079826c2f9e47292_1250x990.png#2;tile-bg;
1971250;990?o=avif,webp,apng')"> 198 <iframe src="https://player.vimeo.com/video/252378915?autoplay=1&loop=1&title=0&byline=0&portrait=0&background=1" 199 frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> 200 </div> 201 <div class="title-text"> 202 203 204 <p class="eyebrow intro-label">Welcome to Midas Manufacturing</p> 205 <h1 class="heading primary h1 normal">Large, Complex, Precision Mouldings in the shortest leadtimes</h1> 206 207 208 <a class="pill-btn orange hide-for-medium white" href="#">Explore</a> 209 </div> 210 </div> 211 <div class="right-panel tile lg:notches"> 212 <picture><img alt="" height="700" loading="lazy" src="/Content/Images/82b9899529900e93baaec881e6882bdc17d02a3d_700x700.png#2;right-tile-bg;700;700?o=avif,webp,apng" title="" width="700" /></picture> 213 <div class="title-text"> 214 <p class="eyebrow intro-label white">Midas Green Initiative</p> 215 <h2 class="heading secondary h2 normal">ISO 14064 (1 2 & 3) Carbon Net Zero Eco manufacturing without greenwash</h2> 216 <a class="pill-btn white hide-for-medium white" href="/green-initiative">Explore </a> 217 </div> 218 </div> 219 </div> 220</section>
221<script> 222 document.addEventListener('DOMContentLoaded', function () { 223 var wrapper = document.querySelector('.two-block-banner .vimeo-wrapper'); 224 var iframe = wrapper ? wrapper.querySelector('iframe') : null; 225 if (!wrapper || !iframe) return; 226 227 var videoAspectRatio = 16 / 9; 228 229 function updateVideoSize() { 230 var wrapperWidth = wrapper.offsetWidth; 231 var wrapperHeight = wrapper.offsetHeight; 232 var wrapperAspectRatio = wrapperWidth / wrapperHeight; 233 234 iframe.style.width = ''; 235 iframe.style.height = ''; 236 237 if (wrapperAspectRatio > videoAspectRatio) { 238 iframe.style.width = wrapperWidth + 'px'; 239 iframe.style.height = (wrapperWidth / videoAspectRatio) + 'px'; 240 } else { 241 iframe.style.height = wrapperHeight + 'px'; 242 iframe.style.width = (wrapperHeight * videoAspectRatio) + 'px'; 243 } 244 } 245 246 updateVideoSize(); 247 window.addEventListener('resize', updateVideoSize); 248 249 var player = new Vimeo.Player(iframe); 250 player.on('play', function () { 251 iframe.style.opacity = 1; 252 }); 253 }); 254</script>
254 255 256 257 258 </component> 259 <component data-id="8"> 260 261 <section class="component text-block"> 262 <div class="text-block-container section-container tile"> 263 <p class="eyebrow intro-label">Established since 1989</p> 264 <div class="html-text"><p><strong>Accelerate your time to market - Production MRIM™ tooling in <span style="color:#f54c00"><u>6 weeks or less</u> </span></strong></p> 265 266<p><strong><span style="color:#f54c00"><u>LOW COST</u></span> Midas MRIM™ composite tooling - 5000 off - Guaranteed!</strong></p> 267 268<p><strong>Simplify your supply chain with a moulding solution that is all under one roof</strong></p> 269 270<p><span style="color:#f54c00"><u><strong>GENUINE 'Carbon Net Zero' Manufacturing</strong></u></span></p> 271 272<p><strong>1 off Model, a Handful of Prototypes or Production volumes (10's -1000's) of High Quality PuR moulded parts in the shortest timeframes</strong></p> 273 274<p><span style="color:#f54c00"><u><strong>Kings Award Winner - Sustainable Development - 2023</strong></u></span></p> 275 276<p><strong>38 years experience means Midas is <span style="color:#f54c00"><u>‘Least Risk Option’</u></span> in the marketplace</strong></p> 277 278<p><strong>ISO 9001:2015 / ISO 14001:2015 / ISO 14064 - Scope 1,2 & 3</strong></p> 279 280<p> </p> 281 282<p> </p> 283</div> 284 <div class="explore"> 285 <a class="explore-cursor" href="/services"><p>Explore</p></a> 286 </div> 287 </div> 288</section> 289
290<script> 291 (function () { 292 if (window.updateTextBlockSizes) { 293 window.updateTextBlockSizes(); 294 return; 295 } 296 297 var largeBreakpoint = window.matchMedia('(min-width: 64em)'); 298 var lineHeightRatio = 92 / 86; 299 var minimumFontSize = 40; 300 var maximumFontSize = 300; 301 302 window.updateTextBlockSizes = function () { 303 var containers = document.querySelectorAll('.text-block-container'); 304 305 for (var i = 0; i < containers.length; i++) { 306 var container = containers[i]; 307 var text = container.querySelector('.html-text > p'); 308 309 if (!text) { 310 continue; 311 } 312 313 container.style.removeProperty('height'); 314 315 if (!largeBreakpoint.matches) { 316 container.style.removeProperty('--text-block-font-size'); 317 container.style.removeProperty('--text-block-line-height'); 318 continue; 319 } 320 321 var containerStyle = window.getComputedStyle(container); 322 var paddingTop = parseFloat(containerStyle.paddingTop) || 0; 323 var paddingBottom = parseFloat(containerStyle.paddingBottom) || 0; 324 var availableHeight = container.clientHeight - paddingTop - paddingBottom; 325 326 var fitsInPadding = function () { 327 var eyebrow = container.querySelector('.eyebrow'); 328 var htmlText = container.querySelector('.html-text'); 329 var eyebrowStyle = eyebrow ? window.getComputedStyle(eyebrow) : null; 330 var htmlTextStyle = htmlText ? window.getComputedStyle(htmlText) : null; 331 var usedHeight = (eyebrow ? eyebrow.offsetHeight + (parseFloat(eyebrowStyle.marginBottom) || 0) : 0) + 332 (htmlText ? htmlText.offsetHeight + (parseFloat(htmlTextStyle.marginBottom) || 0) : 0); 333 var fitsWidth = text.scrollWidth <= text.clientWidth + 1; 334 return fitsWidth && usedHeight <= availableHeight; 335 }; 336 337 var low = minimumFontSize; 338 var high = maximumFontSize; 339 var best = minimumFontSize; 340 341 while (low <= high) { 342 var current = Math.floor((low + high) / 2); 343 var currentLineHeight = Math.max(Math.round(current * lineHeightRatio), current + 2); 344 345 container.style.setProperty('--text-block-font-size', current + 'px'); 346 container.style.setProperty('--text-block-line-height', currentLineHeight + 'px'); 347 348 if (fitsInPadding()) { 349 best = current; 350 low = current + 1; 351 } else { 352 high = current - 1; 353 } 354 } 355 356 var bestLineHeight = Math.max(Math.round(best * lineHeightRatio), best + 2); 357 container.style.setProperty('--text-block-font-size', best + 'px'); 358 container.style.setProperty('--text-block-line-height', bestLineHeight + 'px'); 359 360 // Let the tile grow rather than overflow when even the minimum size doesn't fit 361 if (!fitsInPadding()) { 362 container.style.height = 'auto'; 363 } 364 } 365 }; 366 367 if (document.readyState === 'loading') { 368 document.addEventListener('DOMContentLoaded', window.updateTextBlockSizes); 369 } else { 370 window.updateTextBlockSizes(); 371 } 372 373 window.addEventListener('load', window.updateTextBlockSizes); 374 window.addEventListener('resize', window.updateTextBlockSizes); 375 376 if (document.fonts && document.fonts.ready) { 377 document.fonts.ready.then(window.updateTextBlockSizes); 378 } 379 380 if (largeBreakpoint.addEventListener) { 381 largeBreakpoint.addEventListener('change', window.updateTextBlockSizes); 382 } else if (largeBreakpoint.addListener) { 383 largeBreakpoint.addListener(window.updateTextBlockSizes); 384 } 385 })(); 386</script>
386 387 388 389 390 </component> 391 <component data-id="9"> 392 393 <section class="component services-grid"> 394 <div class="services-grid-container section-container"> 395 <div class="title-and-text tile lg:notches"> 396 <h2 class="heading primary h2 normal">Rapid Manufacturing</h2> 397 <div class="html-text"><p>If you need</p> 398 399<p><strong>1 off (or more) CNC machined models in just a few days?</strong></p> 400 401<p><strong>Prototype PU mouldings for design validation in production grade PuR material? - Midas FASTrim™ offers 30 off parts in days</strong></p> 402 403<p><strong>Production PU parts using a low cost composite resin tooling system (@ 1/10<sup>th</sup> Injection Mould Tool Cost) – Midas MRIM™ guarantees 5000 off large, complex, precise, high quality parts </strong></p> 404 405<p>We have the toolmaking solution for you right here......</p> 406</div> 407 <a class="pill-btn white" href="/contact">Click to get a quick costing</a> 408 </div> 409 <div class="tile-grid"> 410 <a class="service-tile tile" href="/services/production-pu-mouldings"> 411 <picture><img alt="" height="475" loading="lazy" src="/Content/Images/ComplexPUInstrumentEnclosure_775x475.jpg#5;thumb;775;475?o=avif,webp,apng" title="" width="775" /></picture> 412 <h3 class="heading secondary h3 normal">Production PU Mouldings</h3> 413 </a> 414 <a class="service-tile tile" href="/services/prototype-mouldings"> 415 <picture><img alt="" height="475" loading="lazy" src="/Content/Images/PrecisionPUInstrumentenclourewithmultiplepaintfinishes_775x475.jpg#6;thumb;775;475?o=avif,webp,apng" title="" width="775" /></picture> 416 <h3 class="heading secondary h3 normal">Prototype PU Mouldings</h3> 417 </a> 418 <a class="service-tile tile" href="/services/model-making"> 419 <picture><img alt="" height="475" loading="lazy" src="/Content/Images/ComplexPUInstrumentEnclosure(2)_775x475.jpg#7;thumb;775;475?o=avif,webp,apng" title="" width="775" /></picture> 420 <h3 class="heading secondary h3 normal">Rapid Turnaround Modelmaking</h3> 421 </a> 422 <a class="service-tile tile" href="/services/tool-making"> 423 <picture><img alt="" height="475" loading="lazy" src="/Content/Images/2015-02-0517.18.27_775x475.jpg#8;thumb;775;475?o=avif,webp,apng" title="" width="775" /></picture> 424 <h3 class="heading secondary h3 normal">Pattern & Tool Making Services</h3> 425 </a> 426 </div> 427 </div> 428</section> 429 430 431 432 </component> 433 <component data-id="10"> 434 435 <section class="component scroll-panels"> 436 <div class="scroll-panels-container section-container"> 437 <div class="full-screen-panel tile"> 438 <picture><img alt="" height="1080" loading="lazy" src="/Content/Images/ProtonBeamScannerbuiltaroundMidasPrecisionPUmouldings2_1920x1080.png#830;panel;1920;1080?o=avif,webp,apng" title="" width="1920" /></picture> 439 <div class="info-text"> 440 <p class="eyebrow intro-label white">PU Moulding</p> 441 <div class="html-text"><p>Supplying the largest (3m x 1.5m x 1m) most complex, precision polyurethane mouldings, where consistency, finish quality, and short leadtimes are demanded, On Time, Every time – ‘Quality on Time’</p> 442</div> 443 </div> 444 <a href="/services/production-pu-mouldings"> 445 <h2 class="heading primary h2 normal">PU Moulding</h2> 446 </a> 447 </div> 448 <div class="full-screen-panel tile"> 449 <picture><img alt="" height="1080" loading="lazy" src="/Content/Images/937_0568.00_01_36_23.Still060_1920x1080.jpg#37;panel;1920;1080?o=avif,webp,apng" title="" width="1920" /></picture> 450 <div class="info-text"> 451 <p class="eyebrow intro-label white">MRIM⢠for Production</p> 452 <div class="html-text"><p>Midas <strong>MRIM™</strong> is the name we give to our unique composite resin tooling system which is used to produce the highest quality polyurethane RIM moulded parts.</p> 453</div> 454 </div> 455 <a href="/services/production-pu-mouldings/mrim-tooling"> 456 <h2 class="heading primary h2 normal">MRIM⢠for Production</h2> 457 </a> 458 </div> 459 <div class="full-screen-panel tile"> 460 <picture><img alt="" height="1080" loading="lazy" src="/Content/Images/937_0568.00_00_17_17.Still007_1920x1080.jpg#38;panel;1920;1080?o=avif,webp,apng" title="" width="1920" /></picture> 461 <div class="info-text"> 462 <p class="eyebrow intro-label white">FASTrim⢠for Prototypes</p> 463 <div class="html-text"><p>Midas <strong>FASTrim</strong>™ gives you the opportunity to obtain rapid prototype Polyurethane RIM mouldings, in production rated UL94 VO cast pol
463yurethane, in just days, subsequently helping you with product launches, demo instruments and Alpha/Beta test machines.</p> 464</div> 465 </div> 466 <a href="/services/prototype-mouldings/fastrim-tooling"> 467 <h2 class="heading primary h2 normal">FASTrim⢠for Prototypes</h2> 468 </a> 469 </div> 470 471 </div> 472 <a class="explore-cursor"><p>Explore</p></a> 473</section>
474<script> 475 (function () { 476 var panels = document.querySelectorAll('.scroll-panels .full-screen-panel'); 477 panels.forEach(function (panel, i) { 478 panel.style.zIndex = i + 1; 479 }); 480 481 function fitHeadings() { 482 panels.forEach(function (panel) { 483 var heading = panel.querySelector('.heading'); 484 if (!heading) return; 485 486 var available = panel.offsetWidth - 34; 487 if (available <= 0) return; 488 489 heading.style.whiteSpace = 'nowrap'; 490 491 var lo = 1, hi = 500, best = lo; 492 while (lo <= hi) { 493 var mid = Math.floor((lo + hi) / 2); 494 heading.style.fontSize = mid + 'px'; 495 if (heading.scrollWidth <= available) { 496 best = mid; 497 lo = mid + 1; 498 } else { 499 hi = mid - 1; 500 } 501 } 502 heading.style.fontSize = best + 'px'; 503 heading.style.lineHeight = (best * (1.2)).toFixed(2) + 'px'; 504 }); 505 } 506 507 fitHeadings(); 508 window.addEventListener('resize', fitHeadings); 509 510 var container = document.querySelector('.scroll-panels .scroll-panels-container'); 511 var cursor = document.querySelector('.scroll-panels .explore-cursor'); 512 513 if (container && cursor) { 514 var mouseX = 0, mouseY = 0; 515 516 container.addEventListener('mouseenter', function () { 517 cursor.classList.add('visible'); 518 }); 519 520 container.addEventListener('mouseleave', function () { 521 cursor.classList.remove('visible'); 522 cursor.classList.remove('active'); 523 }); 524 525 526 container.addEventListener('mousemove', function (e) { 527 cursor.style.left = e.clientX + 'px'; 528 cursor.style.top = e.clientY + 'px'; 529 }); 530 531 window.addEventListener('mousemove', function (e) { 532 mouseX = e.clientX; 533 mouseY = e.clientY; 534 }); 535 536 window.addEventListener('scroll', function () { 537 var rect = container.getBoundingClientRect(); 538 var inside = mouseX >= rect.left && mouseX <= rect.right && mouseY >= rect.top && mouseY <= rect.bottom; 539 if (inside) { 540 cursor.style.left = mouseX + 'px'; 541 cursor.style.top = mouseY + 'px'; 542 cursor.classList.add('visible'); 543 } else { 544 cursor.classList.remove('visible'); 545 cursor.classList.remove('active'); 546 } 547 }, { passive: true }); 548 549 container.addEventListener('mouseover', function (e) { 550 if (e.target.closest('a')) { 551 cursor.classList.add('active'); 552 } 553 }); 554 555 container.addEventListener('mouseout', function (e) { 556 if (e.target.closest('a')) { 557 cursor.classList.remove('active'); 558 } 559 }); 560 } 561 })(); 562</script>
562 563 564 565 566 </component> 567 <component data-id="12"> 568 569 <section class="component info-block-slider"> 570 <div class="info-block-slider-container section-container tile lg:full-page-section"> 571 <div class="eyebrow-text-btn"> 572 <p class="eyebrow intro-label">Green Initiative</p> 573 <h2 class="heading primary h2 normal">Midas is Genuinely Carbon Net Zero 'NO Greenwash'</h2> 574 <a class="pill-btn orange" href="/green-initiative">Explore the Midas Green Initiative</a> 575 </div> 576 577 <div class="block-slick"> 578 <div class="info-block img-block tile"> 579 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/MidasEcoSlab100logo_370x370.jpg#972;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 580 <p class="info-number">Eco Paving</p> 581 <p class="info-label"></p> 582 </div> 583 <div class="info-block img-block tile"> 584 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/MidasGreenPuLogo2_370x370.jpg#834;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 585 <p class="info-number">Green PU</p> 586 <p class="info-label"></p> 587 </div> 588 <div class="info-block img-block tile"> 589 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/46034262_s_370x370.jpg#831;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 590 <p class="info-number">Zero Carbon</p> 591 <p class="info-label">ISO 14064 - 1 2 & 3</p> 592 </div> 593 <div class="info-block img-block tile"> 594 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/kings-award-thumb_370x370.webp#833;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 595 <p class="info-number">Kings Award</p> 596 <p class="info-label">Kings Award for Enterprise - Sustainability 2023</p> 597 </div> 598 <div class="info-block img-block tile"> 599 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/Capture3_370x370_2.jpg#942;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 600 <p class="info-number">E.S.G</p> 601 <p class="info-label">ESG 12 & 13</p> 602 </div> 603 <div class="info-block img-block tile"> 604 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/medallions_370x370.jpeg#832;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 605 <p class="info-number">Forest</p> 606 <p class="info-label">Corporate Partner of The Forest of Marston Vale</p> 607 </div> 608 <div class="info-block img-block tile"> 609 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/251_1_640x480_370x370.jpg#835;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 610 <p class="info-number">No PU Waste</p> 611 <p class="info-label">ALL PU waste recycled in house</p> 612 </div> 613 <div class="info-block img-block tile"> 614 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/360_3_640x480_370x370.jpg#941;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 615 <p class="info-number">Environment</p> 616 <p class="info-label">ISO 14001:2015</p> 617 </div> 618 <div class="info-block img-block tile"> 619 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/f7f7cfd2c479e575b2da1ccb8e7f94de280a0159_370x370.jpg#945;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 620 <p class="info-number">NO Landfill</p> 621 <p class="info-label"></p> 622 </div> 623 <div class="info-block img-block tile"> 624 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/Vans_370x370_2.jpg#44;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 625 <p class="info-number">EV Deliveries</p> 626 <p class="info-label">Carbon free deliveries</p> 627 </div> 628 <div class="info-block img-block tile"> 629 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/4733-400_370x370.jpg#42;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 630 <p class="info-number">Recycling</p> 631 <p class="info-label">100% Recycled Paper Based Packaging</p> 632 </div> 633 <div class="info-block img-block tile"> 634 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/greenenergylogo_370x370_1.jpg#84;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 635 <p class="info-number">100%</p> 636 <p class="info-label">BIOGAS</p> 637 </div> 638 <div class="info-block img-block tile"> 639 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/4733-300_370x370.jpg#83;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 640 <p class="info-number">100%</p> 641 <p class="info-label">LED Lighting</p> 642 </div> 643 <div class="info-block img-block tile"> 644 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/Ecotricity_370x370.jpg#836;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 645 <p class="info-number">Clean Power</p> 646 <p class="info-label">Truly Green by Ecotricity</p> 647 </div> 648 <div class="info-block img-block tile"> 649 <picture><img alt="" height="370" loading="lazy" src="/Content/Images/Midas-SolarInstall-NoText39_370x370.jpg#43;block;370;370?o=avif,webp,apng" title="" width="370" /></picture> 650 <p class="info-number">Solar Farm</p> 651 <p class="info-label">734 solar panels </p> 652 </div> 653 </div> 654 655 <picture><img alt="" class="bg-img show-for-medium" height="1750" loading="lazy" src="/Content/Images/82b9899529900e93baaec881e6882bdc17d02a3d(1)_1750x1750.png#2;bg-graphic;1750;1750?o=avif,webp,apng" title="" width="1750" /></picture> 656
657 <div class="block-slider-controls"> 658 <div class="slider-controls show-for-large"><button class="block-slider-prev"><i class="fast fa-chevron-left"></i></button><button class="block-slider-next"><i class="fast fa-chevron-right"></i></button></div> 659 </div> 660 </div> 661</section> 662
663<script> 664 $(() => { 665 $(".block-slick").slick({ 666 arrows: false, 667 variableWidth: true, 668 mobileFirst: true, 669 responsive: [ 670 { 671 breakpoint: 1024, 672 settings: { 673 arrows: true, 674 prevArrow: $(".block-slider-prev"), 675 nextArrow: $(".block-slider-next") 676 } 677 } 678 ] 679 }); 680 681 }) 682</script>
682 683 684 685 686 </component> 687 <component data-id="11"> 688 689 <section class="component scroll-slider" data-scroll-slider> 690 <div class="scroll-slider-track"> 691 <div class="scroll-slider-sticky"> 692 <div class="scroll-slider-container section-container"> 693 694 <div class="scroll-slider-left tile"> 695 696 697 698 <div class="scroll-slider-bg is-active" data-slide-bg="0" data-slide-url="/markets/medical"> 699 700 <picture><img alt="" height="1080" loading="lazy" src="/Content/Images/PUHighGlossPaintMedicalDevice1_960x1080_1.jpg#827;slide;960;1080?o=avif,webp,apng" title="" width="960" /></picture> 701 </div> 702 <div class="scroll-slider-bg " data-slide-bg="1" data-slide-url="/markets/medtec-devices"> 703 704 <picture><img alt="" height="1080" loading="lazy" src="/Content/Images/45_1_640x420_960x1080.jpg#828;slide;960;1080?o=avif,webp,apng" title="" width="960" /></picture> 705 </div> 706 <div class="scroll-slider-bg " data-slide-bg="2" data-slide-url="/markets/metrology"> 707 708 <picture><img alt="" height="1080" loading="lazy" src="/Content/Images/PUR8_960x1080.jpg#829;slide;960;1080?o=avif,webp,apng" title="" width="960" /></picture> 709 </div> 710 <div class="scroll-slider-bg " data-slide-bg="3" data-slide-url="/markets/aerospace"> 711 712 <picture><img alt="" height="1080" loading="lazy" src="/Content/Images/liam20paint_960x1080.jpg#41;slide;960;1080?o=avif,webp,apng" title="" width="960" /></picture> 713 </div> 714 715 <div class="scroll-slider-left-top"> 716 <p class="eyebrow intro-label">Key Markets</p> 717 </div> 718 719 <nav class="scroll-slider-nav" aria-label="Slide navigation"> 720 <button class="scroll-slider-nav-btn is-active" 721 data-slide-target="0" 722 aria-label="Medical"> 723 <span class="scroll-slider-nav-label">Medical</span> 724 </button> 725 <button class="scroll-slider-nav-btn " 726 data-slide-target="1" 727 aria-label="Medtec Devices"> 728 <span class="scroll-slider-nav-label">Medtec Devices</span> 729 </button> 730 <button class="scroll-slider-nav-btn " 731 data-slide-target="2" 732 aria-label="Metrology"> 733 <span class="scroll-slider-nav-label">Metrology</span> 734 </button> 735 <button class="scroll-slider-nav-btn " 736 data-slide-target="3" 737 aria-label="Aerospace"> 738 <span class="scroll-slider-nav-label">Aerospace</span> 739 </button> 740 </nav> 741 742 <a class="explore-cursor hide-for-large" href="#"><p>Explore</p></a> 743 </div> 744 745 <div class="scroll-slider-right hide-for-small tile notches"> 746 <div class="scroll-slider-panel tile notches is-active" data-slide-panel="0"> 747 <p class="eyebrow intro-label">Medical</p> 748 <div class="html-text"><p>The medical market is extremely diverse and requires highly technical equipment to ensure patients are treated in the safest possible way.</p> 749 750<p><span style="color:#f54c00">At Midas, we specialise in the prototyping and production of medical device mouldings.</span></p> 751 752<p>We understand the precision that must go into every single panel, cover or casing and use state-of-the-art technology to manufacture them.</p> 753</div> 754 <a class="pill-btn orange" href="/markets/medical">Explore</a> 755 </div> 756 <div class="scroll-slider-panel tile notches " data-sli
756de-panel="1"> 757 <p class="eyebrow intro-label">Medtec Devices</p> 758 <div class="html-text"><p><span style="color:#f54c00">MEDTEC devices are highly specialised and require strong, durable, functional mouldings to ensure they perform as designed.</span></p> 759 760<p>At Midas we have worked with some of the biggest names in the MEDTEC industry over the last 38 years to produce polyurethane covers and enclosures using our tried and tested MRIM Tooling solution</p> 761</div> 762 <a class="pill-btn orange" href="/markets/medtec-devices">Explore</a> 763 </div> 764 <div class="scroll-slider-panel tile notches " data-slide-panel="2"> 765 <p class="eyebrow intro-label">Metrology</p> 766 <div class="html-text"><p>Working for the biggest names in the Metrology sector demands we supply the most precise and well finished Polyurethane moulded enclosures.</p> 767 768<p><span style="color:#f54c00">ISO 9001:2015 accreditation and the latest in CNC/CAE and Digital Inspection equipment ensures we deliver the very best product.</span></p> 769</div> 770 <a class="pill-btn orange" href="/markets/metrology">Explore</a> 771 </div> 772 <div class="scroll-slider-panel tile notches " data-slide-panel="3"> 773 <p class="eyebrow intro-label">Aerospace</p> 774 <div class="html-text"><p>We provide specialist mouldings for the aerospace industry.</p> 775 776<p><span style="color:#f54c00">Focusing on refurbishment & renovation to ensure every plane stays in the air for as long as possible before replacement</span></p> 777 778<p>Our lightweight PuR mouldings, expertise, tight quality control, and aviation-approved materials ensure every product is built for life in the air.</p> 779</div> 780 <a class="pill-btn orange" href="/markets/aerospace">Explore</a> 781 </div> 782 </div> 783 784 </div> 785 </div> 786 </div> 787</section> 788
789<script> 790 (function () { 791 var section = document.querySelector('[data-scroll-slider]'); 792 if (!section) return; 793 794 var track = section.querySelector('.scroll-slider-track'); 795 var sticky = section.querySelector('.scroll-slider-sticky'); 796 var navBtns = Array.prototype.slice.call(section.querySelectorAll('.scroll-slider-nav-btn')); 797 var bgs = Array.prototype.slice.call(section.querySelectorAll('[data-slide-bg]')); 798 var panels = Array.prototype.slice.call(section.querySelectorAll('[data-slide-panel]')); 799 var exploreBtns = Array.prototype.slice.call(section.querySelectorAll('.explore-cursor')); 800 var total = navBtns.length; 801 var current = 0; 802 803 function sizeTrack() { 804 var gap = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--gap')) || 20; 805 var vh = window.innerHeight; 806 track.style.height = (vh * (total + 1) + gap) + 'px'; 807 sticky.style.height = (vh - gap) + 'px'; 808 } 809 810 function goTo(index) { 811 if (index === current) return; 812 current = Math.max(0, Math.min(total - 1, index)); 813 navBtns.forEach(function (btn, i) { 814 btn.classList.toggle('is-active', i === current); 815 }); 816 bgs.forEach(function (bg, i) { 817 bg.classList.toggle('is-active', i === current); 818 }); 819 panels.forEach(function (panel, i) { 820 panel.classList.toggle('is-active', i === current); 821 }); 822 var url = bgs[current] ? (bgs[current].getAttribute('data-slide-url') || '#') : '#'; 823 exploreBtns.forEach(function (btn) { 824 btn.setAttribute('href', url); 825 }); 826 } 827 828 function onScroll() { 829 var trackRect = track.getBoundingClientRect(); 830 var vh = window.innerHeight; 831 // how far the top of the track has scrolled above the viewport top 832 var scrolled = -trackRect.top; 833 834 if (scrolled < 0) { 835 goTo(0); 836 navBtns.forEach(function (btn) { btn.style.setProperty('--progress', '0'); }); 837 return; 838 } 839 840 var index = Math.floor(scrolled / vh); 841 goTo(Math.min(index, total - 1)); 842 843 navBtns.forEach(function (btn, i) { 844 var slideStart = i * vh; 845 var slideProgress = Math.min(Math.max((scrolled - slideStart) / vh, 0), 1); 846 btn.style.setProperty('--progress', slideProgress); 847 }); 848 } 849 850 var lineHeightRatio = 44 / 40; 851 var minimumFontSize = 18; 852 var maximumFontSize = 40; 853 854 // Shrink each panel's text until its content fits inside the panel's padding 855 function fitPanels() { 856 panels.forEach(function (panel) { 857 var text = panel.querySelector('.html-text'); 858 859 if (!text) { 860 return; 861 } 862 863 var panelStyle = window.getComputedStyle(panel); 864 var availableHeight = panel.clientHeight - (parseFloat(panelStyle.paddingTop) || 0) - (parseFloat(panelStyle.paddingBottom) || 0); 865 866 if (availableHeight <= 0) { 867 return; 868 } 869 870 var fits = function () { 871 var usedHeight = 0; 872 873 for (var c = 0; c < panel.children.length; c++) { 874 var child = panel.children[c]; 875 var childStyle = window.getComputedStyle(child); 876 usedHeight += child.offsetHeight + (parseFloat(childStyle.marginTop) || 0) + (parseFloat(childStyle.marginBottom) || 0); 877 } 878 879 var paragraphs = text.querySelectorAll('p'); 880 for (var p = 0; p < paragraphs.length; p++) { 881 if (paragraphs[p].scrollWidth > paragraphs[p].clientWidth + 1) { 882 return false; 883 } 884 } 885 886 return usedHeight <= availableHeight; 887 }; 888 889 var setSize = function (size) { 890 panel.style.setProperty('--scroll-slider-font-size', size + 'px'); 891 panel.style.setProperty('--scroll-slider-line-height', Math.max(Math.round(size * lineHeightRatio), size + 2) + 'px'); 892 }; 893 894 setSize(maximumFontSize); 895 896 if (fits()) { 897 return; 898 } 899 900 var low = minimumFontSize; 901 var high = maximumFontSize - 1; 902 var best = minimumFontSize; 903 904 while (low <= high) { 905 var size = Math.floor((low + high) / 2); 906 setSize(size); 907 908 if (fits()) { 909 best = size; 910 low = size + 1; 911 } else { 912 high = size - 1; 913 } 914 } 915 916 setSize(best); 917 }); 918 } 919 920 // Manual nav button clicks � scroll so that slide i is active 921 navBtns.forEach(function (btn, i) { 922 btn.addEventListener('click', function () { 923 var trackRect = track.getBoundingClientRect(); 924 var trackTop = window.pageYOffset + trackRect.top; 925 var target = trackTop + (i * window.innerHeight); 926 window.scrollTo({ top: target, behavior: 'smooth' }); 927 }); 928 }); 929 930 // Seed the explore button href for the initial slide 931 var initialUrl = bgs[0] ? (bgs[0].getAttribute('data-sli
931de-url') || '#') : '#'; 932 exploreBtns.forEach(function (btn) { btn.setAttribute('href', initialUrl); }); 933 934 sizeTrack(); 935 fitPanels(); 936 window.addEventListener('resize', sizeTrack); 937 window.addEventListener('resize', fitPanels); 938 window.addEventListener('load', fitPanels); 939 940 if (document.fonts && document.fonts.ready) { 941 document.fonts.ready.then(fitPanels); 942 } 943 944 window.addEventListener('scroll', onScroll, { passive: true }); 945 onScroll(); 946 }()); 947</script>
947 948 949 950 951 952 </component> 953 <component data-id="13"> 954 955 956 957<section class="component hotspots-panel"> 958 <div class="hotspots-panel-container section-container tile"> 959 <div class="subject"> 960 <img src="/Content/Images/34925adc431236e5fa586da1127f9072327ef561(1)_1920x1080.png#1;background-img;1920;1080" /> 961 </div> 962 963 <div class="title-text-btn"> 964 <h2 class="heading primary h2 normal">Expert Finishing</h2> 965 <div class="html-text"><p>All Midas mouldings are fully painted as part of the process and this opens up a whole range of texture and colour options.</p> 966</div> 967<a class="pill-btn orange" href="/services/prototype-mouldings/finishing">Read more about finishing and painting</a> </div> 968 969 970 <div class="hotspot" data-index="0" data-x="45.59" data-y="46.14"><div></div></div> 971 <svg class="hotspot-connector" data-index="0" xmlns="http://www.w3.org/2000/svg"> 972 <line x1="0" y1="0" x2="100%" y2="100%" /> 973 </svg> 974 <div class="hotspot" data-index="1" data-x="65.25" data-y="61.16"><div></div></div> 975 <svg class="hotspot-connector" data-index="1" xmlns="http://www.w3.org/2000/svg"> 976 <line x1="0" y1="0" x2="100%" y2="100%" /> 977 </svg> 978 <div class="hotspot" data-index="2" data-x="49.76" data-y="71.15"><div></div></div> 979 <svg class="hotspot-connector" data-index="2" xmlns="http://www.w3.org/2000/svg"> 980 <line x1="0" y1="0" x2="100%" y2="100%" /> 981 </svg> 982 983 <div class="hotspot-infos-section"> 984 <div class="hotspot-info tile"> 985 <div class="top"> 986 <span> 987 <i class="far fa-pencil"></i> 988 </span> 989 <p>Precision Masking</p> 990 </div> 991 <div> 992 <p>Quality masking for multiple colours and RFI/EMC shield coating</p> 993 994 </div> 995 </div> 996 <div class="hotspot-info tile"> 997 <div class="top"> 998 <span> 999 <i class="far fa-droplet"></i> 1000 </span> 1001 <p>Chemical Resistant</p> 1002 </div> 1003 <div> 1004 <p>We ensure that your product is hard wearing durable and resistant to chemicals and cleaning agents</p> 1005 1006 </div> 1007 </div> 1008 <div class="hotspot-info tile"> 1009 <div class="top"> 1010 <span> 1011 <i class="fal fa-swatchbook"></i> 1012 </span> 1013 <p>Colour Options</p> 1014 </div> 1015 <div> 1016 <p>
1016We offer BS4800, RAL & Pantone colours as standard and can colour match to samples. </p> 1017 1018 </div> 1019 </div> 1020 </div> 1021 </div> 1022</section> 1023
1024<script> 1025 (function () { 1026 var hotspotRadius = 35; 1027 var hoveredIndex = -1; 1028 var lgBreakpoint = 1024; 1029 var popupGap = 12; 1030 var activePopupIndex = -1; 1031 var compactGap = 20; 1032 1033 function isMobile() { 1034 return window.innerWidth < lgBreakpoint; 1035 } 1036 1037 function isCompact() { 1038 var container = document.querySelector('.hotspots-panel-container'); 1039 return !!container && container.classList.contains('compact'); 1040 } 1041 1042 // Compute the rendered size of an object-fit:cover image 1043 function getCoverScale(img) { 1044 var natW = img.naturalWidth; 1045 var natH = img.naturalHeight; 1046 var contW = img.offsetWidth; 1047 var contH = img.offsetHeight; 1048 1049 if (!natW || !natH) return null; 1050 1051 var natRatio = natW / natH; 1052 var contRatio = contW / contH; 1053 var renderedW, renderedH; 1054 1055 if (natRatio > contRatio) { 1056 renderedH = contH; 1057 renderedW = natRatio * contH; 1058 } else { 1059 renderedW = contW; 1060 renderedH = contW / natRatio; 1061 } 1062 1063 return { renderedW: renderedW, renderedH: renderedH, contW: contW, contH: contH }; 1064 } 1065 1066 // Calculate the object-position that keeps all hotspot dots inside the safe area,
1067 // then return the cover rect with the adjusted offsets. 1068 function getAdjustedCoverRect(img, hotspotEls) { 1069 var scale = getCoverScale(img); 1070 if (!scale) return null; 1071 1072 var rw = scale.renderedW; 1073 var rh = scale.renderedH; 1074 var cw = scale.contW; 1075 var ch = scale.contH; 1076 1077 // Default center offsets 1078 var offsetX = (cw - rw) / 2; 1079 var offsetY = (ch - rh) / 2; 1080 1081 // Safe margin: keep dots this far from container edges 1082 var margin = hotspotRadius + 5; 1083 1084 // Collect the bounding box of all hotspot positions in rendered-image space 1085 var minImgX = Infinity, maxImgX = -Infinity; 1086 var minImgY = Infinity, maxImgY = -Infinity; 1087 1088 hotspotEls.forEach(function (dot) { 1089 var xPct = parseFloat(dot.getAttribute('data-x')); 1090 var yPct = parseFloat(dot.getAttribute('data-y')); 1091 var imgX = (xPct / 100) * rw; 1092 var imgY = (yPct / 100) * rh; 1093 if (imgX < minImgX) minImgX = imgX; 1094 if (imgX > maxImgX) maxImgX = imgX; 1095 if (imgY < minImgY) minImgY = imgY; 1096 if (imgY > maxImgY) maxImgY = imgY; 1097 }); 1098 1099 // Adjust offsetX so all dots land within [margin, cw - margin] 1100 // Dot container position = offsetX + imgX, needs to be >= margin and <= cw - margin 1101 // offsetX >
1101= margin - minImgX and offsetX <= (cw - margin) - maxImgX 1102 var excessX = rw - cw; 1103 if (excessX > 0) { 1104 var minOffsetX = -excessX; // fully shifted left 1105 var maxOffsetX = 0; // fully shifted right 1106 var needMinX = margin - minImgX; 1107 var needMaxX = (cw - margin) - maxImgX; 1108 offsetX = Math.max(minOffsetX, Math.min(maxOffsetX, Math.max(needMinX, Math.min(needMaxX, offsetX)))); 1109 } 1110 1111 // Adjust offsetY similarly 1112 var excessY = rh - ch; 1113 if (excessY > 0) { 1114 var minOffsetY = -excessY; 1115 var maxOffsetY = 0; 1116 var needMinY = margin - minImgY; 1117 var needMaxY = (ch - margin) - maxImgY; 1118 offsetY = Math.max(minOffsetY, Math.min(maxOffsetY, Math.max(needMinY, Math.min(needMaxY, offsetY)))); 1119 } 1120 1121 // Apply the adjusted object-position to the image element 1122 var opX = excessX > 0 ? (-offsetX / excessX) * 100 : 50; 1123 var opY = excessY > 0 ? (-offsetY / excessY) * 100 : 50; 1124 img.style.objectPosition = opX + '% ' + opY + '%'; 1125 1126 return { offsetX: offsetX, offsetY: offsetY, width: rw, height: rh }; 1127 } 1128 1129 // Find the point on a rectangle's boundary where the ray from (fromX,fromY) 1130 // toward the rectangle centre first intersects an edge. 1131 function getBoxEdgePoint(fromX, fromY, left, top, right, bottom) { 1132 var cx = (left + right) / 2; 1133 var cy = (top + bottom) / 2; 1134 var dx = cx - fromX; 1135 var dy = cy - fromY; 1136 if (dx === 0 && dy === 0) return { x: cx, y: cy }; 1137 1138 var tMin = Infinity; 1139 1140 if (dx !== 0) { 1141 var t = (left - fromX) / dx; 1142 if (t > 0) { var y = fromY + t * dy; if (y >= top && y <= bottom && t < tMin) tMin = t; } 1143 t = (right - fromX) / dx; 1144 if (t > 0) { y = fromY + t * dy; if (y >= top && y <= bottom && t < tMin) tMin = t; } 1145 } 1146 if (dy !== 0) { 1147 var t = (top - fromY) / dy; 1148 if (t > 0) { var x = fromX + t * dx; if (x >= left && x <= right && t < tMin) tMin = t; } 1149 t = (bottom - fromY) / dy; 1150 if (t > 0) { x = fromX + t * dx; if (x >= left && x <= right && t < tMin) tMin = t; } 1151 } 1152 1153 if (tMin === Infinity) return { x: cx, y: cy }; 1154 return { x: fromX + tMin * dx, y: fromY + tMin * dy }; 1155 } 1156 1157 // Convert image-percentage coords to container pixel coords 1158 function imageToContainer(xPct, yPct, coverRect) { 1159 return { 1160 x: coverRect.offsetX + (xPct / 100) * coverRect.width, 1161 y: coverRect.offsetY + (yPct / 100) * coverRect.height 1162 }; 1163 } 1164 1165 function positionHotspots() { 1166 var section = document.querySelector('.hotspots-panel'); 1167 if (!section) return; 1168 var container = section.querySelector('.hotspots-panel-container'); 1169 if (!container) return; 1170 var img = container.querySelector('.subject img'); 1171 if (!img) return; 1172 1173 var hotspotEls = container.querySelectorAll('.hotspot'); 1174 var coverRect = getAdjustedCoverRect(img, hotspotEls); 1175 if (!coverRect) return; 1176 1177 var connectors = container.querySelectorAll('.hotspot-connector'); 1178 var infoCards = container.querySelectorAll('.hotspot-info'); 1179 var infosSection = container.querySelector('.hotspot-infos-section'); 1180 var containerRect = container.getBoundingClientRect(); 1181 1182 var positions = []; 1183 var maxDotRight = -Infinity; 1184 hotspotEls.forEach(function (dot) { 1185 var xPct = parseFloat(dot.getAttribute('data-x')); 1186 var yPct = parseFloat(dot.getAttribute('data-y')); 1187 var pos = imageToContainer(xPct, yPct, coverRect); 1188 1189 dot.style.left = pos.x + 'px'; 1190 dot.style.top = pos.y + 'px'; 1191 positions.push(pos); 1192 if (pos.x + hotspotRadius > maxDotRight) maxDotRight = pos.x + hotspotRadius; 1193 }); 1194 1195 // Switch to the tap-to-reveal layout when the rightmost dot would reach the info boxes 1196 container.classList.remove('compact'); 1197 var compact = isMobile(); 1198 if (!compact && infosSection) { 1199 var infosLeft = infosSection.getBoundingClientRect().left - containerRect.left; 1200 compact = maxDotRight + compactGap >= infosLeft; 1201 } 1202 container.classList.toggle('compact', compact); 1203 if (compact) { 1204 updateActive(); 1205 return; 1206 } 1207
1208 hotspotEls.forEach(function (dot, i) { 1209 var pos = positions[i]; 1210 1211 // Position the matching connector 1212 var svg = connectors[i]; 1213 if (!svg) return; 1214 1215 var infoCard = infoCards[i]; 1216 if (!infoCard) return; 1217 var infoRect = infoCard.getBoundingClientRect(); 1218 1219 var dotCenterX = pos.x; 1220 var dotCenterY = pos.y; 1221 1222 var cardLeft = infoRect.left - containerRect.left; 1223 var cardTop = infoRect.top - containerRect.top; 1224 var cardRight = cardLeft + infoRect.width; 1225 var cardBottom = cardTop + infoRect.height; 1226 var edgePt = getBoxEdgePoint(dotCenterX, dotCenterY, cardLeft, cardTop, cardRight, cardBottom); 1227 var endX = edgePt.x; 1228 var endY = edgePt.y; 1229 1230 var dx = endX - dotCenterX; 1231 var dy = endY - dotCenterY; 1232 var dist = Math.sqrt(dx * dx + dy * dy); 1233 1234 var startX = dotCenterX; 1235 var startY = dotCenterY; 1236 if (dist > 0) { 1237 startX = dotCenterX + (dx / dist) * hotspotRadius; 1238 startY = dotCenterY + (dy / dist) * hotspotRadius; 1239 } 1240 1241 var left = Math.min(startX, endX); 1242 var top = Math.min(startY, endY); 1243 var width = Math.abs(endX - startX); 1244 var height = Math.abs(endY - startY); 1245 1246 svg.style.position = 'absolute'; 1247 svg.style.left = left + 'px'; 1248 svg.style.top = top + 'px'; 1249 svg.style.width = Math.max(width, 1) + 'px'; 1250 svg.style.height = Math.max(height, 1) + 'px'; 1251 1252 var lineLength = Math.sqrt(width * width + height * height); 1253 1254 var line = svg.querySelector('line'); 1255 if (line) { 1256 var x1 = startX <= endX ? '100%' : '0'; 1257 var y1 = startY <= endY ? '100%' : '0'; 1258 var x2 = startX <= endX ? '0' : '100%'; 1259 var y2 = startY <= endY ? '0' : '100%'; 1260 line.setAttribute('x1', x1); 1261 line.setAttribute('y1', y1); 1262 line.setAttribute('x2', x2); 1263 line.setAttribute('y2', y2); 1264 line.style.strokeDasharray = '6 4'; 1265 line.style.setProperty('--line-length', lineLength); 1266 } 1267 }); 1268 1269 updateActive(); 1270 } 1271 1272 function updateActive() { 1273 if (hoveredIndex >= 0) {
1274 setActiveByIndex(hoveredIndex); 1275 return; 1276 } 1277 1278 var section = document.querySelector('.hotspots-panel'); 1279 if (!section) return; 1280 var container = section.querySelector('.hotspots-panel-container'); 1281 if (!container) return; 1282 1283 var hotspotEls = container.querySelectorAll('.hotspot'); 1284 var infoCards = container.querySelectorAll('.hotspot-info'); 1285 var connectors = container.querySelectorAll('.hotspot-connector'); 1286 var screenCenterY = window.innerHeight / 2; 1287 1288 var closestIndex = -1; 1289 var closestDist = Infinity; 1290 hotspotEls.forEach(function (el, i) { 1291 var rect = el.getBoundingClientRect(); 1292 var dotCenterY = rect.top + rect.height / 2; 1293 var dist = Math.abs(dotCenterY - screenCenterY); 1294 if (dist < closestDist) { 1295 closestDist = dist; 1296 closestIndex = i; 1297 } 1298 }); 1299 1300 var sectionRect = section.getBoundingClientRect(); 1301 var isVisible = sectionRect.top < window.innerHeight && sectionRect.bottom > 0; 1302 1303 hotspotEls.forEach(function (el, i) { 1304 var isActive = isVisible && i === closestIndex; 1305 el.classList.toggle('active', isActive); 1306 if (infoCards[i]) infoCards[i].classList.toggle('active', isActive); 1307 if (connectors[i]) connectors[i].classList.toggle('active', isActive); 1308 }); 1309 } 1310 1311 function setActiveByIndex(index) { 1312 var section = document.querySelector('.hotspots-panel'); 1313 if (!section) return; 1314 var container = section.querySelector('.hotspots-panel-container'); 1315 if (!container) return; 1316 1317 var hotspotEls = container.querySelectorAll('.hotspot'); 1318 var infoCards = container.querySelectorAll('.hotspot-info'); 1319 var connectors = container.querySelectorAll('.hotspot-connector'); 1320 1321 hotspotEls.forEach(function (el, i) { 1322 var isActive = i === index; 1323 el.classList.toggle('active', isActive); 1324 if (infoCards[i]) infoCards[i].classList.toggle('active', isActive); 1325 if (connectors[i]) connectors[i].classList.toggle('active', isActive); 1326 }); 1327 } 1328 1329 function bindHoverEvents() { 1330 var section = document.querySelector('.hotspots-panel'); 1331 if (!section) return; 1332 var container = section.querySelector('.hotspots-panel-container'); 1333 if (!container) return; 1334 1335 var hotspotEls = container.querySelectorAll('.hotspot'); 1336 var infoCards = container.querySelectorAll('.hotspot-info'); 1337 1338 hotspotEls.forEach(function (el, i) { 1339 el.addEventListener('mouseenter', function () { 1340 hoveredIndex = i;
1341 setActiveByIndex(i); 1342 }); 1343 el.addEventListener('mouseleave', function () { 1344 hoveredIndex = -1; 1345 updateActive(); 1346 }); 1347 }); 1348 1349 infoCards.forEach(function (el, i) { 1350 el.addEventListener('mouseenter', function () { 1351 hoveredIndex = i; 1352 setActiveByIndex(i); 1353 }); 1354 el.addEventListener('mouseleave', function () { 1355 hoveredIndex = -1; 1356 updateActive(); 1357 }); 1358 }); 1359 } 1360 1361 function closePopup() { 1362 var existing = document.querySelector('.hotspot-popup'); 1363 if (existing) existing.remove(); 1364 activePopupIndex = -1; 1365 } 1366 1367 function showPopup(index) { 1368 closePopup(); 1369 1370 var section = document.querySelector('.hotspots-panel'); 1371 if (!section) return; 1372 var container = section.querySelector('.hotspots-panel-container'); 1373 if (!container) return; 1374 1375 var hotspotEls = container.querySelectorAll('.hotspot'); 1376 var infoCards = container.querySelectorAll('.hotspot-info'); 1377 if (index >= infoCards.length || index >= hotspotEls.length) return; 1378 1379 var dot = hotspotEls[index]; 1380 var card = infoCards[index]; 1381 activePopupIndex = index; 1382 1383 var popup = document.createElement('div'); 1384 popup.className = 'hotspot-popup tile'; 1385 popup.innerHTML = card.innerHTML; 1386 container.appendChild(popup); 1387 1388 var dotRect = dot.getBoundingClientRect(); 1389 var containerRect = container.getBoundingClientRect(); 1390 var popupRect = popup.getBoundingClientRect(); 1391 1392 var topPos = (dotRect.top - containerRect.top) - popupRect.height - popupGap; 1393 var leftPos = (dotRect.left - containerRect.left) + (dotRect.width / 2) - (popupRect.width / 2); 1394 1395 var minLeft = popupGap; 1396 var maxLeft = container.offsetWidth - popupRect.width - popupGap; 1397 leftPos = Math.max(minLeft, Math.min(leftPos, maxLeft)); 1398 1399 if (topPos < popupGap) { 1400 topPos = (dotRect.bottom - containerRect.top) + popupGap; 1401 } 1402 1403 popup.style.top = topPos + 'px'; 1404 popup.style.left = leftPos + 'px'; 1405 } 1406 1407 function bindMobileClickEvents() { 1408 var section = document.querySelector('.hotspots-panel'); 1409 if (!section) return; 1410 var container = section.querySelector('.hotspots-panel-container'); 1411 if (!container) return; 1412 1413 var hotspotEls = container.querySelectorAll('.hotspot'); 1414 1415 hotspotEls.forEach(function (el) { 1416 el.addEventListener('click', function (e) { 1417 if (!isCompact()) return; 1418 e.stopPropagation(); 1419 var index = parseInt(el.getAttribute('data-index'), 10); 1420 if (activePopupIndex === index) { 1421 closePopup(); 1422 } else { 1423 showPopup(index); 1424 } 1425 }); 1426 }); 1427 1428 document.addEventListener('click', function (e) { 1429 if (!isCompact()) return; 1430 var popup = document.querySelector('.hotspot-popup'); 1431 if (popup && !popup.contains(e.target)) { 1432 closePopup(); 1433 } 1434 }); 1435 } 1436 1437 // Initialise once image has loaded (naturalWidth available) 1438 var img = document.querySelector('.hotspots-panel .subject img'); 1439 function init() { 1440 positionHotspots(); 1441 bindHoverEvents(); 1442 bindMobileClickEvents(); 1443 window.addEventListener('resize', function () { 1444 closePopup(); 1445 positionHotspots(); 1446 }); 1447 window.addEventListener('scroll', updateActive); 1448 } 1449 1450 if (img && img.complete) { 1451 init(); 1452 } else if (img) { 1453 img.addEventListener('load', init); 1454 } 1455 })(); 1456</script>
1456 1457 1458 1459 1460 </component> 1461 <component data-id="14"> 1462 1463 1464 1465<section class="component insights-slider slide-in"> 1466 <div class="insights-slider-container section-container "> 1467 <div class="left-panel tile lg:notches"> 1468 <div class="title-text"> 1469 <h2 class="heading primary h2 normal">News & Midas Insights</h2> 1470 <p class="show-for-medium">Stay updated on our latest news & insights.</p> 1471<a class="pill-btn white" href="/insights">All News</a> </div> 1472 <div class="slider-controls show-for-large"><button class="insights-slick-prev"><i class="fast fa-chevron-left"></i></button><button class="insights-slick-next"><i class="fast fa-chevron-right"></i></button></div> 1473 </div> 1474 <div class="insights-slick"> 1475 <a class="insight-tile" href="/news-and-midas-insights/how-rim-works"> 1476 <div class="image"> 1477 <picture><img alt="" loading="lazy" src="/Content/Images/368_1_640x480.jpg#718;custom-img;;?o=avif,webp,apng" title="" /></picture> 1478 <p class="eyebrow intro-label white">Insight</p> 1479 </div> 1480 <h3 class="heading secondary h3 normal">How RIM Works</h3> 1481 </a> 1482 <a class="insight-tile" href="/news-and-midas-insights/one-tonne-of-carbon"> 1483 <div class="image"> 1484 <picture><img alt="" loading="lazy" src="/Content/Images/1tonupdated.jpg#987;custom-img;;?o=avif,webp,apng" title="" /></picture> 1485 <p class="eyebrow intro-label white">Insight</p> 1486 </div> 1487 <h3 class="heading secondary h3 normal">One Tonne of Carbon: The Hidden Weight of Our Emissions</h3> 1488 </a> 1489 <a class="insight-tile" href="/news-and-midas-insights/eco-slabs"> 1490 <div class="image"> 1491 <picture><img alt="" loading="lazy" src="/Content/Images/MidasEcoSlab100logo.jpg#974;custom-img;;?o=avif,webp,apng" title="" /></picture> 1492 <p class="eyebrow intro-label white">Insight</p> 1493 </div> 1494 <h3 class="heading secondary h3 normal">Midas will soon be manufacturing a 100%, Carbon Free, alternative to traditional mineral based paving slabs</h3> 1495 </a> 1496 <a class="insight-tile" href="/news-and-midas-insights/green-polyurethane"> 1497 <div class="image"> 1498 <picture><img alt="" loading="lazy" src="/Content/Images/MidasGreenPuLogo2.jpg#968;custom-img;;?o=avif,webp,apng" title="" /></picture> 1499 <p class="eyebrow intro-label white">Insight</p> 1500 </div> 1501 <h3 class="heading secondary h3 normal">Midas will soon be offering a plant based alternative to traditional oil based polyurethanes</h3> 1502 </a> 1503 <a class="insight-tile" href="/news-and-midas-insights/midas-mouldings-support-organ-transplants"> 1504 <div class="image"> 1505 <picture><img alt="" loading="lazy" src="/Content/Images/214_3_640x480.jpg#436;custom-img;;?o=avif,webp,apng" title="" /></picture> 1506 <p class="eyebrow intro-label white">Insight</p> 1507 </div> 1508 <h3 class="heading secondary h3 normal">Midas Mouldings Support Organ Transplants</h3> 1509 </a> 1510 <a class="insight-tile" href="/news-and-midas-insights/new-website"> 1511 <div class="image"> 1512 <picture><img alt="" loading="lazy" src="/Content/Images/verto.jpg#952;custom-img;;?o=avif,webp,apng" title="" /></picture> 1513 <p class="eyebrow intro-label white">Insight</p> 1514 </div> 1515 <h3 class="heading secondary h3 normal">Our New Website - Only 15 years in the making!</h3> 1516 </a> 1517 </div> 1518 </div> 1519</section>
1520<script> 1521 $(() => { 1522 $(".insights-slick").slick({ 1523 variableWidth: true, 1524 variableHeight: true, 1525 infinite: false, 1526 mobileFirst: true, 1527 arrows: false, 1528 responsive: [ 1529 { 1530 breakpoint: 1024, 1531 settings: { 1532 arrows: true, 1533 prevArrow: $(".insights-slick-prev"), 1534 nextArrow: $(".insights-slick-next") 1535 }, 1536 } 1537 ] 1538 }); 1539 }); 1540</script>
1540 1541 1542 1543 </component> 1544 <component data-id="15"> 1545 1546 1547 1548<section class="component image-and-text-page-link"> 1549 <div class="image-and-text-page-link-container section-container"> 1550 <div class="left-img-text md:notches"> 1551 <div class="top-text"> 1552<p class="eyebrow intro-label white">Video & Broadcasting Equipment</p><svg class="svg-line" height="1" preserveAspectRatio="none" viewBox="0 0 100 1" width="100%" xmlns="http://www.w3.org/2000/svg"><line x1="0" y1="0.5" x2="100" y2="0.5" stroke="#EDEDED" stroke-width="1" vector-effect="non-scaling-stroke" stroke-dasharray="4 4" /></svg> </div> 1553 1554 <img src="/Content/Images/57_3_640x480_800x500.jpg#2;left-img;800;500" /> 1555 <div class="bottom-text show-for-medium"> 1556 <svg class="svg-line" height="1" preserveAspectRatio="none" viewBox="0 0 100 1" width="100%" xmlns="http://www.w3.org/2000/svg"><line x1="0" y1="0.5" x2="100" y2="0.5" stroke="#EDEDED" stroke-width="1" vector-effect="non-scaling-stroke" stroke-dasharray="4 4" /></svg> 1557 <p>Where ABSOLUTE Quality is required Midas always delivers</p> 1558 </div> 1559 </div> 1560 <div class="text-and-link"> 1561<p class="eyebrow intro-label">Case Studies</p> <h2 class="heading primary h2 normal">Video Mixing Desks and Sound Editing Equipment</h2> 1562<a class="pill-btn orange" href="/case-studies/midas-pattern-company-stars-in-action-packed-adventure">Learn More</a> </div> 1563 </div> 1564</section> 1565
1566<script> 1567 (function () { 1568 if (window.updateImageAndTextPageLinkSizes) { 1569 window.updateImageAndTextPageLinkSizes(); 1570 return; 1571 } 1572 1573 var largeBreakpoint = window.matchMedia('(min-width: 64em)'); 1574 var lineHeightRatio = 92 / 86; 1575 var minimumFontSize = 40; 1576 var maximumFontSize = 86; 1577 1578 // Shrink the heading until the eyebrow, heading and button fit beside the image 1579 window.updateImageAndTextPageLinkSizes = function () { 1580 var containers = document.querySelectorAll('.image-and-text-page-link-container'); 1581 1582 for (var i = 0; i < containers.length; i++) { 1583 var container = containers[i]; 1584 var image = container.querySelector('.left-img-text'); 1585 var textAndLink = container.querySelector('.text-and-link'); 1586 var heading = textAndLink ? textAndLink.querySelector('.heading') : null; 1587 1588 if (!image || !heading) { 1589 continue; 1590 } 1591 1592 if (!largeBreakpoint.matches) { 1593 textAndLink.style.removeProperty('--page-link-font-size'); 1594 textAndLink.style.removeProperty('--page-link-line-height'); 1595 continue; 1596 } 1597 1598 var textStyle = window.getComputedStyle(textAndLink); 1599 var availableHeight = image.offsetHeight - (parseFloat(textStyle.paddingTop) || 0) - (parseFloat(textStyle.paddingBottom) || 0); 1600 var availableWidth = textAndLink.clientWidth - (parseFloat(textStyle.paddingLeft) || 0) - (parseFloat(textStyle.paddingRight) || 0); 1601 1602 var fits = function () { 1603 var usedHeight = 0; 1604 1605 for (var c = 0; c < textAndLink.children.length; c++) { 1606 var child = textAndLink.children[c]; 1607 var childStyle = window.getComputedStyle(child); 1608 usedHeight += child.offsetHeight + (parseFloat(childStyle.marginTop) || 0) + (parseFloat(childStyle.marginBottom) || 0); 1609 } 1610 1611 return heading.scrollWidth <= availableWidth + 1 && usedHeight <= availableHeight; 1612 }; 1613 1614 var setSize = function (size) { 1615 textAndLink.style.setProperty('--page-link-font-size', size + 'px'); 1616 textAndLink.style.setProperty('--page-link-line-height', Math.max(Math.round(size * lineHeightRatio), size + 2) + 'px'); 1617 }; 1618 1619 setSize(maximumFontSize); 1620 1621 if (fits()) { 1622 continue; 1623 } 1624 1625 var low = minimumFontSize; 1626 var high = maximumFontSize - 1; 1627 var best = minimumFontSize; 1628 1629 while (low <= high) { 1630 var size = Math.floor((low + high) / 2); 1631 setSize(size); 1632 1633 if (fits()) { 1634 best = size; 1635 low = size + 1; 1636 } else { 1637 high = size - 1; 1638 } 1639 } 1640 1641 setSize(best); 1642 } 1643 }; 1644 1645 if (document.readyState === 'loading') { 1646 document.addEventListener('DOMContentLoaded', window.updateImageAndTextPageLinkSizes); 1647 } else { 1648 window.updateImageAndTextPageLinkSizes(); 1649 } 1650 1651 window.addEventListener('load', window.updateImageAndTextPageLinkSizes); 1652 window.addEventListener('resize', window.updateImageAndTextPageLinkSizes); 1653 1654 if (document.fonts && document.fonts.ready) { 1655 document.fonts.ready.then(window.updateImageAndTextPageLinkSizes); 1656 } 1657 1658 if (largeBreakpoint.addEventListener) { 1659 largeBreakpoint.addEventListener('change', window.updateImageAndTextPageLinkSizes); 1660 } else if (largeBreakpoint.addListener) { 1661 largeBreakpoint.addListener(window.updateImageAndTextPageLinkSizes); 1662 } 1663 })(); 1664</script>
1664 1665 1666 1667 1668 </component> 1669 1670 1671 </section> 1672 1673 1674 1675 1676 1677 1678 <footer class="site-footer section-container"> 1679 <div class="site-footer-container lg:notches"> 1680 <div class="site-footer__top dotted-bottom"> 1681 <p>Would you like to know more about our capabilities, green initiative or discuss a project?</p> 1682 <div class="buttons"> 1683<a class="pill-btn orange" href="/contact">Let's Talk</a> <a class="pill-btn invert show-for-medium orange" href="/case-studies">Case Studies</a> </div> 1684 </div> 1685 <div class="site-footer__bottom"> 1686 <div class="links-and-signup"> 1687 <div class="links md:dotted-bottom lg:no-dotted"> 1688 <div class="logo-and-contact dotted-bottom md:no-dotted"> 1689 <a href="/"> 1690 <img src="/Images/logo_f.png" /> 1691 </a> 1692 <p> 1693 1694 <a href="tel:+441234358394"> 1695 +44 (0)1234 358394 1696 </a> 1697 <br /> 1698 <a href="mailto:[email protected]"> 1699 [email protected] 1700 </a> 1701 </p> 1702 </div> 1703 <div class="footer-links show-for-medium"> 1704 <ul> 1705 <li><a href="/services/production-pu-mouldings">Production PU Mouldings</a></li> 1706 <li><a href="/services/prototype-mouldings">Prototype PU Mouldings</a></li> 1707 <li><a href="/services/model-making">Rapid Turnaround Modelmaking</a></li> 1708 <li><a href="/services/tool-making">Pattern & Tool Making Services</a></li> 1709 <li><a href="/markets">Markets</a></li> 1710 </ul> 1711 </div> 1712 <div class="footer-links show-for-medium"> 1713 <ul> 1714 <li><a href="/green-initiative">Green Initiative</a></li> 1715 <li><a href="/about">About</a></li> 1716 <li><a href="/case-studies">Case Studies</a></li> 1717 <li><a href="/contact">Contact Us</a></li> 1718 <li><a href="/news-and-midas-insights">News & Midas Insights</a></li> 1719 </ul> 1720 </div> 1721 </div> 1722 </div> 1723 <div class="bottom-links"> 1724 <ul> 1725 <li><a href="/">© Midas Pattern Company 2026</a></li> 1726 <li><a href="/terms-and-conditions">Terms & Conditions</a></li> 1727 <li><a href="/privacy-policy">Privacy Policy</a></li> 1728 <li><a href="/cookie-policy">Cookie Policy</a></li> 1729 <li><a href="#" onclick="cookieConsent.reset()">Cookie Preferences</a></li> 1730 <li><a href="https://www.verto.co.uk/">Site by Verto</a></li> 1731</ul> 1732 1733<ul> 1734 <li><a href="https://www.linkedin.com/company/midas-pattern-company-ltd?originalSubdomain=uk">LinkedIn</a></li> 1735 <li><a href="https://vimeo.com/midaspatternco">vimeo</a></li> 1736 <li><a href="https://www.instagram.com/midas_pattern/">Instagram</a></li> 1737</ul> 1738 1739 </div> 1740 </div> 1741 1742 </div> 1743 </footer> 1744 1745 <aside class="mobile-menu" id="mobile-menu"> 1746 <button class="mobile-menu__close" onclick="document.getElementById('mobile-menu').classList.remove('is-open');document.getElementById('mobile-menu-overlay').classList.remove('is-open');" aria-label="Close menu"><i class="fasl fa-times"></i></button> 1747 <nav class="mobile-menu__nav"> 1748 <ul> 1749 <li> 1750 <a href="/services">Services</a> 1751 <button type="button" aria-expanded="false" aria-label="Toggle Services menu" onclick="this.setAttribute('aria-expanded', this.getAttribute('aria-expanded') !== 'true')"></button> 1752 <div> 1753 <ul> 1754 <li><a href="/services/production-pu-mouldings">Production PU Mouldings</a></li> 1755 <li><a href="/services/prototype-mouldings">Prototype PU Mouldings</a></li> 1756 <li><a href="/services/model-making">Rapid Turnaround Modelmaking</a></li> 1757 <li><a href="/services/tool-making">Pattern & Tool Making Services</a></li> 1758 </ul> 1759 </div> 1760 </li> 1761 <li> 1762 <a href="/markets">Markets</a> 1763 <button type="button" aria-expanded="false" aria-label="Toggle Markets menu" onclick="this.setAttribute('aria-expanded', this.getAttribute('aria-expanded') !== 'true')"></button> 1764 <div> 1765 <ul> 1766 <li><a href="/markets/medical">Medical</a></li> 1767 <li><a href="/markets/medtec-devices">MEDTEC & Analytical Devices</a></li> 1768 <li><a href="/markets/green-market">Green </a></li> 1769 <li><a href="/markets/metrology">Metrology</a></li> 1770 <li><a href="/markets/aerospace">Aerospace</a></li> 1771 <li><a href="/markets/automotive">Automotive</a></li> 1772 <li><a href="/markets/broadcasting">Broadcasting / Video / Audio</a></li> 1773 <li><a href="/markets/consumer">Consumer</a></li> 1774 <li><a href="/markets/environmental">Environmental & Solar</a></li> 1775 <li><a href="/markets/lifestyle">Lifestyle</a></li> 1776 <li><a href="/markets/marine-transportation">Marine & Transportation</a></li> 1777 <li><a href="/markets/beauty">Beauty</a></li> 1778 <li><a href="/markets/finishing-assembly">Finishing & Assembly</a></li> 1779 </ul> 1780 </div> 1781 </li> 1782 <li><a href="/case-studies">Case Studies</a></li> 1783 <li><a style="color: #94c11e" href="/green-initiative">Green Initiative</a></li> 1784 <li> 1785 <a href="/about">About</a> 1786 <button type="button" aria-expanded="false" aria-label="Toggle About menu" onclick="this.setAttribute('aria-expanded', this.getAttribute('aria-expanded') !== 'true')"></button> 1787 <div> 1788 <ul> 1789 <li><a href="/about/overview">Midas Overview</a></li> 1790 <li><a href="/about/history">History</a></li> 1791 <li><a href="/about/accreditations">Accreditations</a></li> 1792 <li><a href="/about/faqs">FAQ's</a></li> 1793 <li><a href="/about/careers">Careers</a></li> 1794 <li><a href="/news-and-midas-insights">News & Midas Insights</a></li> 1795 </ul> 1796 </div> 1797 </li> 1798 <li><a href="/news-and-midas-insights">News & Midas Insights</a></li> 1799 <li><a href="/contact">Contact</a></li> 1800 </ul> 1801 1802 </nav> 1803 <div class="mobile-menu__contact"> 1804 <p><a href="tel:+441234358394">+44 (0)1234 358394</a></p> 1805 <p><a href="mailto:[email protected]">[email protected]</a></p> 1806 </div> 1807 </aside> 1808 <div class="mobile-menu-overlay" id="mobile-menu-overlay" onclick="document.getElementById('mobile-menu').classList.remove('is-open');this.classList.remove('is-open');"></div> 1809 1810 </section> 1811 1812
1812<script> 1813 function FormComplete(result) { 1814 var response = result.responseJSON; 1815 var popup = document.getElementById('form-popup'); 1816 var icon = document.getElementById('form-complete'); 1817 var userText = popup.querySelector('.user-text'); 1818 var pageDarken = document.getElementById('page-darken'); 1819 1820 userText.innerHTML = '<p><strong>' + response.message + '</strong></p><p>' + response.next + '</p>'; 1821 1822 icon.classList.remove('fa-circle-check', 'fa-circle-xmark'); 1823 icon.classList.add(response.success ? 'fa-circle-check' : 'fa-circle-xmark'); 1824 1825 popup.classList.add('active'); 1826 pageDarken.classList.add('active'); 1827 1828 if (response.success) { 1829 var forms = document.querySelectorAll('.user-form'); 1830 forms.forEach(function (form) { form.reset(); }); 1831 } 1832 } 1833 1834 function FormFailure() { 1835 var popup = document.getElementById('form-popup'); 1836 var icon = document.getElementById('form-complete'); 1837 var userText = popup.querySelector('.user-text'); 1838 var pageDarken = document.getElementById('page-darken'); 1839 1840 userText.innerHTML = '<p><strong>Error occurred</strong></p><p>Please try again later.</p>'; 1841 1842 icon.classList.remove('fa-circle-check', 'fa-circle-xmark'); 1843 icon.classList.add('fa-circle-xmark'); 1844 1845 popup.classList.add('active'); 1846 pageDarken.classList.add('active'); 1847 } 1848 1849 function CloseFormPopup() { 1850 document.getElementById('form-popup').classList.remove('active'); 1851 document.getElementById('page-darken').classList.remove('active'); 1852 } 1853 </script>
1853 1854 1855 <div id="page-darken"></div> 1856 1857 <div id="form-popup"> 1858 <div class="form-popup-inner"> 1859 <i class="fasl fa-circle-check" id="form-complete"></i> 1860 <div class="user-text"> 1861 <p> 1862 <strong>Thank you for your submission!</strong> 1863 </p> 1864 <p> 1865 We'll be in touch shortly. 1866 </p> 1867 </div> 1868 1869 <button type="button" class="pill-btn orange form-popup-close" onclick="CloseFormPopup()"> 1870 Close 1871 </button> 1872 </div> 1873 </div> 1874 1875
1875<script> 1876 document.getElementById('page-darken').addEventListener('click', function () { 1877 CloseFormPopup(); 1878 }); 1879 </script>
1879 1880 1881 1882 1883<aside id="cookie-prompt" class="" data-on-label="On" data-off-label="Off"> 1884 1885 <section class="cc-primary-container "> 1886 1887 1888 1889 <div class="cc-flex"> 1890 1891 <div> 1892 <header>We use cookies to give you the best experience on our website and to personalise it to you.</header> 1893 If you '<span data-mirror-consent-button>Acknowledge & Accept</span>' we can enable additional website features and we'll also use cookies to measure and improve our services, website and marketing. You can find more information in our <a href="/privacy-policy">privacy policy</a> 1894 1895 <span><span data-hide-if-consent-options> or <a href="#" onclick="cookieConsent.choices();">see your other options</a></span>.</span> 1896 1897 </div> 1898 1899 <div> 1900 <a href="#" class="cc-button cc-button-accept" onclick="cookieConsent.accept();">Acknowledge & Accept</a> 1901 <a href="#" class="cc-button cc-button-reject" onclick="cookieConsent.decline();">Reject Non-Essential</a> 1902 1903 </div> 1904 1905 </div> 1906 1907 </section> 1908 1909 <section class="cc-options"> 1910 1911 Please select which types of cookies you're happy for us to use. 1912 1913 <div class="cc-options-list"> 1914 1915 <div> 1916 <header><input type='checkbox' id='consent-Essential' value="Essential" checked disabled /><label for='consent-Essential'>Essential</label></header> 1917 Some of the cookies we store on your device are essential or required for the website to run properly, or to fulfil our security and safety obligations. Such cookies may already have been stored when you accessed the website. These are not used for marketing or advertisement purposes. 1918 </div> 1919 1920 <div> 1921 <header><input type='checkbox' id='consent-Functional' value="Functional" /><label for='consent-Functional'>Enhanced Functionality</label></header> 1922 Some optional features of our website may use cookies, particularly where we utilise third-party services, for example to provide a live chat. These features will be unavailable or limited if you do not grant this permission. These cookies may be used to identify you as a returning visitor or to remember your choices. We rely on third-parties to store and process some of your information. See our <a href="/privacy-policy">privacy policy</a> for more details. 1923 </div> 1924 1925 <div> 1926 <header><input type='checkbox' id='consent-Analytical' value="Analytical" /><label for='consent-Analytical'>Analytics & Marketing</label></header> 1927 Some cookies are used in order to measure and analyse your engagement with our website, so that we can improve our services and website over time. These cookies may be used to identify you as a returning visitor. We rely on third-parties to store and process this information. See our <a href="/privacy-policy">privacy policy</a> for more details. 1928 </div> 1929 1930 </div> 1931 1932 <div class="cc-flex"> 1933 <a href="#" class="cc-button" onclick="cookieConsent.acceptSelection();">Accept Selection</a> 1934 <a href="#" class="cc-button cc-button-grey" onclick="cookieConsent.accept();">Accept All</a> 1935 </div> 1936 1937 </section> 1938 1939</aside> 1940 1941 1942
1942<script src="/virtual/bundles/body-scripts?v=Q3QdIsAfMG94uRq0yMzlAJc-VBv0Abk312pTvA82kV01"></script>
1942 1943 1944 1945
1945<script defer src="https://player.vimeo.com/api/player.js"></script>
1945 1946 1947 1948 1949
1950<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"763f71a285ad4c11a52bc4938a54af89","r":1,"spa":2}' crossorigin="anonymous"></script>
1950 1951</body> 1952</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.