PageSourceSearch

https://midaspattern.co.uk/

html midaspattern.co.uk collected 2026-10-02 23:14:34 UTC 96,740 bytes, 1,952 lines download raw bytes

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 &amp; 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 &amp; 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 &amp; 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 &amp; Solar</a>
146                                        <a class="dropdown-grid__link" href="/markets/lifestyle">Lifestyle</a>
147                                        <a class="dropdown-grid__link" href="/markets/marine-transportation">Marine &amp; Transportation</a>
148                                        <a class="dropdown-grid__link" href="/markets/beauty">Beauty</a>
149                                        <a class="dropdown-grid__link" href="/markets/finishing-assembly">Finishing &amp; 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&#39;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&amp;loop=1&amp;title=0&amp;byline=0&amp;portrait=0&amp;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 -&nbsp;Production MRIM&trade;&nbsp;tooling in <span style="color:#f54c00"><u>6 weeks or less</u>&nbsp;</span></strong></p>
265
266<p><strong><span style="color:#f54c00"><u>LOW COST</u></span> Midas MRIM&trade;&nbsp;composite&nbsp;tooling - 5000 off - Guaranteed!</strong></p>
267
268<p><strong>Simplify your supply chain with a moulding&nbsp;solution that is all under one roof</strong></p>
269
270<p><span style="color:#f54c00"><u><strong>GENUINE &#39;Carbon Net Zero&#39; Manufacturing</strong></u></span></p>
271
272<p><strong>1 off Model,&nbsp;a Handful of Prototypes or&nbsp;Production volumes (10&#39;s -1000&#39;s) of High Quality PuR&nbsp;moulded parts in the shortest timeframes</strong></p>
273
274<p><span style="color:#f54c00"><u><strong>Kings Award Winner&nbsp;- Sustainable Development - 2023</strong></u></span></p>
275
276<p><strong>38 years experience means Midas is&nbsp;<span style="color:#f54c00"><u>&lsquo;Least Risk Option&rsquo;</u></span> in the marketplace</strong></p>
277
278<p><strong>ISO 9001:2015 / ISO 14001:2015 /&nbsp;ISO 14064 - Scope 1,2 &amp; 3</strong></p>
279
280<p>&nbsp;</p>
281
282<p>&nbsp;</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&nbsp;PU&nbsp;mouldings for design validation in production grade PuR material? - Midas FASTrim&trade; offers 30 off parts in days</strong></p>
402
403<p><strong>Production&nbsp;PU&nbsp;parts using a&nbsp;low cost composite resin tooling system (@ 1/10<sup>th</sup> Injection Mould Tool Cost)&nbsp; &ndash; Midas MRIM&trade; guarantees&nbsp;5000 off large, complex, precise, high quality parts&nbsp;</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 &ndash; &lsquo;Quality on Time&rsquo;</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&trade;</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>&trade; 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 &amp; 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 &amp; 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&nbsp;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,&nbsp;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&nbsp;years to produce polyurethane covers and enclosures&nbsp;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&nbsp;mouldings for the aerospace industry.</p>
775
776<p><span style="color:#f54c00">Focusing on refurbishment &amp; 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&nbsp;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 &amp; Pantone colours as standard and can colour match to samples.&nbsp;</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 &amp; 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 &amp; 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&#39;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 &amp; 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 &amp; Midas Insights</a></li>
1719                                    </ul>
1720                                </div>
1721                        </div>
1722                    </div>
1723                    <div class="bottom-links">
1724                        <ul>
1725	<li><a href="/">&copy; Midas Pattern Company 2026</a></li>
1726	<li><a href="/terms-and-conditions">Terms &amp; 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 &amp; 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 &amp; 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 &amp; Solar</a></li>
1775                                        <li><a href="/markets/lifestyle">Lifestyle</a></li>
1776                                        <li><a href="/markets/marine-transportation">Marine &amp; Transportation</a></li>
1777                                        <li><a href="/markets/beauty">Beauty</a></li>
1778                                        <li><a href="/markets/finishing-assembly">Finishing &amp; 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&#39;s</a></li>
1793                                        <li><a href="/about/careers">Careers</a></li>
1794                                    <li><a href="/news-and-midas-insights">News &amp; Midas Insights</a></li>
1795                                </ul>
1796                            </div>
1797                    </li>
1798                    <li><a href="/news-and-midas-insights">News &amp; 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.