PageSourceSearch

https://www.playags.com/

html playags.com collected 2026-09-24 10:33:07 UTC 151,832 bytes, 2,903 lines download raw bytes

1<!DOCTYPE html><!-- Last Published: Wed Sep 09 2026 16:57:33 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="ags-prod.webflow.io" data-wf-page="68a742cc2e51325fb51b1f37" data-wf-site="6893c2c851dca9d751167409" lang="en-US"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>AGS | Global Gaming Supplier</title><meta content="Delivering the most electrifying gaming experiences in the world. AGS is a global gaming supplier of high-performing slots, tables, online games, and lottery." name="description"/><meta content="AGS | Global Gaming Supplier" property="og:title"/><meta content="Delivering the most electrifying gaming experiences in the world. AGS is a global gaming supplier of high-performing slots, tables, online games, and lottery." property="og:description"/><meta content="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e43462bddb221414e48206_Open_Graph_Image.png" property="og:image"/><meta content="AGS | Global Gaming Supplier" name="twitter:title"/><meta content="Delivering the most electrifying gaming experiences in the world. AGS is a global gaming supplier of high-performing slots, tables, online games, and lottery." name="twitter:description"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><link href="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/css/ags-prod.webflow.shared.38f4de021.min.css" rel="stylesheet" type="text/css" integrity="sha384-OPTeAhjj6uy2ApgFQD6J9RBRaaAr208kfmye7CWDoUzSy6gdwzRxTNyTTpsonWgy" crossorigin="anonymous"/><style>@media (min-width:992px) {html.w-mod-js:not(.w-mod-ix) [data-w-id="80f3d70d-33c3-923f-4444-37eac15e154f"] {-webkit-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="2fa6f405-3672-ac43-6ea5-4f7b0ac75f85"] {-webkit-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="54fa2044-e33e-aea0-3216-49b681c686d3"] {-webkit-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}}</style><style>html.w-mod-js:not(.w-mod-ix3) :is([data-stack-card="card"], .timeline_paragraph-wrapper, .timeline_extention, .footer_background-image, .navbar_search-element) {visibility: hidden !important;}</style>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6899a38844254b6323cf7b13_Favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6899a38a9671b226730d1c79_Webclip.png" rel="apple-touch-icon"/><link href="https://playags.com" rel="canonical"/>
1<script type="application/ld+json">
2{
3  "@context": "https://schema.org",
4  "@type": "Organization",
5  "name": "AGS",
6  "alternateName": "American Gaming Systems",
7  "description": "Global gaming supplier of high-performing slots, tables, online games, and lottery.",
8  "url": "https://www.playags.com",
9  "logo": {
10    "@type": "ImageObject",
11    "url": "https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894c4313cc655199bed2e13_LOG.avif",
12    "caption": "AGS logo with orange lightning bolt"
13  },
14  "inLanguage": "en-US",
15  "sameAs": [
16    "https://www.linkedin.com/company/american-gaming-systems/",
17    "https://www.facebook.com/AmericanGamingSystems",
18    "https://www.youtube.com/user/AmericanGamingSys",
19    "https://www.instagram.com/play_ags/",
20    "https://www.tiktok.com/@playags/video/7473618273737772331",
21    "https://x.com/PlayAGS"
22  ],
23  "areaServed": [
24    {
25      "@type": "Country",
26      "name": "United States"
27    },
28    {
29      "@type": "Country",
30      "name": "Argentina"
31    },
32    {
33      "@type": "Country",
34      "name": "Canada"
35    },
36    {
37      "@type": "Country",
38      "name": "Aruba"
39    },
40    {
41      "@type": "Country",
42      "name": "Mexico"
43    },
44    {
45      "@type": "Country",
46      "name": "Bonaire"
47    },
48    {
49      "@type": "Country",
50      "name": "Australia"
51    },
52    {
53      "@type": "Country",
54      "name": "Chile"
55    },
56    {
57      "@type": "Country",
58      "name": "England"
59    },
60    {
61      "@type": "Country",
62      "name": "Curacao"
63    },
64    {
65      "@type": "Country",
66      "name": "Cyprus"
67    },
68    {
69      "@type": "Country",
70      "name": "Malaysia"
71    },
72    {
73      "@type": "Country",
74      "name": "Puerto Rico"
75    },
76    {
77      "@type": "Country",
78      "name": "Panama"
79    },
80    {
81      "@type": "Country",
82      "name": "Brazil"
83    },
84    {
85      "@type": "Country",
86      "name": "Paraguay"
87    },
88    {
89      "@type": "Country",
90      "name": "Colombia"
91    },
92    {
93      "@type": "Country",
94      "name": "Peru"
95    },
96    {
97      "@type": "Country",
98      "name": "Italy"
99    },
100    {
101      "@type": "Country",
102      "name": "Philippines"
103    },
104    {
105      "@type": "Country",
106      "name": "Romania"
107    },
108    {
109      "@type": "Country",
110      "name": "South Africa"
111    },
112    {
113      "@type": "Country",
114      "name": "Malta"
115    },
116    {
117      "@type": "Country",
118      "name": "St Martin"
119    },
120    {
121      "@type": "Country",
122      "name": "Finland"
123    },
124    {
125      "@type": "Country",
126      "name": "Uruguay"
127    }
128  ],
129  "makesOffer": [
130    {
131      "@type": "Offer",
132      "itemOffered": {
133        "@type": "Product",
134        "name": "Slot Games and Cabinets",
135        "description": "Class II, Class III, and historical horse racing games for markets worldwide"
136      }
137    },
138    {
139      "@type": "Offer",
140      "itemOffered": {
141        "@type": "Product",
142        "name": "Table Products",
143        "description": "Progressives, shufflers, side bets, and table equipment for casino floors"
144      }
145    },
146    {
147      "@type": "Offer",
148      "itemOffered": {
149        "@type": "Product",
150        "name": "Online Gaming",
151        "description": "Real-money online slots, table games, and instant win titles for global markets"
152      }
153    },
154    {
155      "@type": "Offer",
156      "itemOffered": {
157        "@type": "Product",
158        "name": "Lottery",
159        "description": "Game content designed for state and municipal lottery programs"
160      }
161    }
162  ],
163  "slogan": "Fortune favors the bolt"
164}
165</script>
165<!-- Google Consent Mode v2 defaults - must run before CookieYes and GTM -->
166<script>
167  window.dataLayer = window.dataLayer || [];
168  function gtag() {
169    dataLayer.push(arguments);
170  }
171  gtag('consent', 'default', {
172    ad_storage: 'denied',
173    analytics_storage: 'denied',
174    ad_user_data: 'denied',
175    ad_personalization: 'denied',
176    functionality_storage: 'granted',
177    security_storage: 'granted',
178    wait_for_update: 500,
179  });
180</script>
180
181<!-- CookieYes -->
182<script id="cookieyes" type="text/javascript" src="https://cdn-cookieyes.com/client_data/68ee36e78c58dd1c60da61e258d7893b/script.js"></script>
182
183
184<!-- OPTIMIZED HEADER CODE FOR VERCEL -->
185<!-- DNS prefetch and preconnect for faster external resource loading -->
186<!-- Preconnect to CDNs and external resources -->
187<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
188<link rel="dns-prefetch" href="https://cdn.jsdelivr.net" />
189<link rel="preconnect" href="https://www.googletagmanager.com" />
190<link rel="dns-prefetch" href="https://www.googletagmanager.com" />
191<link rel="preconnect" href="https://use.typekit.net" crossorigin />
192<link rel="dns-prefetch" href="https://use.typekit.net" />
193<link rel="preconnect" href="https://cdn.prod.website-files.com" />
194<link rel="dns-prefetch" href="https://cdn.prod.website-files.com" />
195
196<!-- PERFORMANCE FIX #1: Preload LCP images with high priority -->
197<!-- Note: Removed preload links - they may be causing display issues -->
198<!-- The fetchpriority will be set via JavaScript instead -->
199
200<!-- Defer GTM - Load it after page interactive -->
201<script>
202  // Defer GTM to reduce main thread blocking
203  window.addEventListener('load', function () {
204    setTimeout(function () {
vendor: 455 bytes, lines 204-214
204
205      (function (w, d, s, l, i) {
206        w[l] = w[l] || [];
207        w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
208        var f = d.getElementsByTagName(s)[0],
209          j = d.createElement(s),
210          dl = l != 'dataLayer' ? '&l=' + l : '';
211        j.async = true;
212        j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
213        f.parentNode.insertBefore(j, f);
214      })(window, document, 'script', 'dataLayer', '
214GTM-WG7CSMRW
vendor: 8 bytes, lines 214-215
214');
215    
215}, 1000);
216  });
217</script>
217
218
219<!-- Critical inline CSS - Keep this to prevent render blocking -->
220<style>
221  /* Splide core styles */
222  .splide,
223  .splide__track {
224    overflow: visible;
225  }
226  .splide__sr {
227    display: none !important;
228  }
229
230  /* Swiper styles */
231  .swiper-pagination-bullets.swiper-pagination-horizontal {
232    width: auto;
233  }
234
235  /* Hide elements during load */
236  [data-hide-load] {
237    opacity: 0;
238  }
239
240  /* Font smoothing for better rendering */
241  body {
242    -webkit-font-smoothing: antialiased;
243    -moz-osx-font-smoothing: grayscale;
244    text-rendering: optimizeLegibility;
245  }
246
247  /* PERFORMANCE FIX #2: Critical CSS for hero images */
248  .slots-header_element {
249    display: block;
250    max-width: 100%;
251  }
252  .slots-header_element img {
253    display: block;
254    width: 100%;
255    height: auto;
256  }
257  .games_image {
258    display: block;
259    max-width: 100%;
260  }
261</style>
262
263<!-- Defer non-critical CSS with preload + print trick -->
264<!-- This prevents render-blocking while still loading the styles -->
265<link
266  rel="preload"
267  href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css"
268  as="style"
269  onload="
270    this.onload = null;
271    this.rel = 'stylesheet';
272  "
273/>
274<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css" /></noscript>
275<link
276  rel="preload"
277  href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css"
278  as="style"
279  onload="
280    this.onload = null;
281    this.rel = 'stylesheet';
282  "
283/>
284<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" /></noscript>
285
286<!-- Fallback polyfill for preload -->
287<script>
288  /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
289  !(function (n) {
290    'use strict';
291    n.loadCSS || (n.loadCSS = function () {});
292    var o = (loadCSS.relpreload = {});
293    if (
294      ((o.support = (function () {
295        var e;
296        try {
297          e = n.document.createElement('link').relList.supports('preload');
298        } catch (t) {
299          e = !1;
300        }
301        return function () {
302          return e;
303        };
304      })()),
305      (o.bindMediaToggle = function (t) {
306        var e = t.media || 'all';
307        function a() {
308          (t.addEventListener ? t.removeEventListener('load', a) : t.attachEvent && t.detachEvent('onload', a), t.setAttribute('onload', null), (t.media = e));
309        }
310        (t.addEventListener ? t.addEventListener('load', a) : t.attachEvent && t.attachEvent('onload', a),
311          setTimeout(function () {
312            ((t.rel = 'stylesheet'), (t.media = 'only x'));
313          }),
314          setTimeout(a, 3e3));
315      }),
316      !o.support())
317    ) {
318      ((o.poly = function () {
319        if (!n.document.getElementsByTagName('link')) return;
320        for (var t = n.document.getElementsByTagName('link'), e = 0; e < t.length; e++) {
321          var a = t[e];
322          'preload' !== a.rel || 'style' !== a.getAttribute('as') || a.getAttribute('data-loadcss') || (a.setAttribute('data-loadcss', !0), o.bindMediaToggle(a));
323        }
324      }),
325        o.poly());
326      var t = n.setInterval(o.poly, 500);
327      n.addEventListener
328        ? n.addEventListener('load', function () {
329            (o.poly(), n.clearInterval(t));
330          })
331        : n.attachEvent &&
332          n.attachEvent('onload', function () {
333            (o.poly(), n.clearInterval(t));
334          });
335    }
336    'undefined' != typeof exports ? (exports.loadCSS = loadCSS) : (n.loadCSS = loadCSS);
337  })('undefined' != typeof global ? global : this);
338</script>
338</head><body><div class="page-wrapper"><div class="global-styles"><div class="style-overrides w-embed"><style>
339  * {
340    -webkit-font-smoothing: antialiased;
341    -moz-osx-font-smoothing: grayscale;
342    -o-font-smoothing: antialiased;
343  }
344
345  /* Ensure all elements inherit the color from its parent */
346  a,
347  .w-input,
348  .w-select,
349  .w-tab-link,
350  .w-nav-link,
351  .w-nav-brand,
352  .w-dropdown-btn,
353  .w-dropdown-toggle,
354  .w-slider-arrow-left,
355  .w-slider-arrow-right,
356  .w-dropdown-link {
357    color: inherit;
358    text-decoration: inherit;
359  }
360
361  /* Focus state style for keyboard navigation for the focusable elements */
362  *[tabindex]:focus-visible,
363  input[type="file"]:focus-visible {
364    outline: 0.125rem solid #4d65ff;
365    outline-offset: 0.125rem;
366  }
367
368  /* Get rid of top margin on first element in any rich text element */
369  .w-richtext > :not(div):first-child, .w-richtext > div:first-child > :first-child {
370    margin-top: 0 !important;
371  }
372
373  /* Get rid of bottom margin on last element in any rich text element */
374  .w-richtext>:last-child, .w-richtext ol li:last-child, .w-richtext ul li:last-child {
375    margin-bottom: 0 !important;
376  }
377
378  /* Prevent all click and hover interaction with an element */
379  .pointer-events-off {
380    pointer-events: none;
381  }
382
383  /* Enables all click and hover interaction with an element */
384  .pointer-events-on {
385    pointer-events: auto;
386  }
387
388  /* Create a class of .div-square which maintains a 1:1 dimension of a div */
389  .div-square::after {
390    content: "";
391    display: block;
392    padding-bottom: 100%;
393  }
394
395  /* Make sure containers never lose their center alignment */
396  .container-medium,.container-small, .container-large {
397    margin-right: auto !important;
398    margin-left: auto !important;
399  }
400
401  /* Apply "..." after 4 lines of text */
402  .text-style-4lines {
403    display: -webkit-box;
404    overflow: hidden;
405    -webkit-line-clamp: 4;
406    -webkit-box-orient: vertical;
407  }
408
409  /* Apply "..." after 3 lines of text */
410  .text-style-3lines {
411    display: -webkit-box;
412    overflow: hidden;
413    -webkit-line-clamp: 3;
414    -webkit-box-orient: vertical;
415  }
416
417  /* Apply "..." after 2 lines of text */
418  .text-style-2lines {
419    display: -webkit-box;
420    overflow: hidden;
421    -webkit-line-clamp: 2;
422    -webkit-box-orient: vertical;
423  }
424
425  /* Adds inline flex display */
426  .display-inlineflex {
427    display: inline-flex;
428  }
429
430  /* These classes are never overwritten */
431  .hide {
432    display: none !important;
433  }
434
435  /* Remove default Webflow chevron from form select */
436  select{
437    -webkit-appearance:none;
438  }
439
440
441  @media screen and (max-width: 991px) {
442    .hide, .hide-tablet {
443      display: none !important;
444    }
445  }
446  @media screen and (max-width: 767px) {
447    .hide-mobile-landscape{
448      display: none !important;
449    }
450  }
451  @media screen and (max-width: 479px) {
452    .hide-mobile{
453      display: none !important;
454    }
455  }
456
457  .margin-0 {
458    margin: 0rem !important;
459  }
460
461  .padding-0 {
462    padding: 0rem !important;
463  }
464
465  .spacing-clean {
466    padding: 0rem !important;
467    margin: 0rem !important;
468  }
469
470  .margin-top {
471    margin-right: 0rem !important;
472    margin-bottom: 0rem !important;
473    margin-left: 0rem !important;
474  }
475
476  .padding-top {
477    padding-right: 0rem !important;
478    padding-bottom: 0rem !important;
479    padding-left: 0rem !important;
480  }
481
482  .margin-right {
483    margin-top: 0rem !important;
484    margin-bottom: 0rem !important;
485    margin-left: 0rem !important;
486  }
487
488  .padding-right {
489    padding-top: 0rem !important;
490    padding-bottom: 0rem !important;
491    padding-left: 0rem !important;
492  }
493
494  .margin-bottom {
495    margin-top: 0rem !important;
496    margin-right: 0rem !important;
497    margin-left: 0rem !important;
498  }
499
500  .padding-bottom {
501    padding-top: 0rem !important;
502    padding-right: 0rem !important;
503    padding-left: 0rem !important;
504  }
505
506  .margin-left {
507    margin-top: 0rem !important;
508    margin-right: 0rem !important;
509    margin-bottom: 0rem !important;
510  }
511
512  .padding-left {
513    padding-top: 0rem !important;
514    padding-right: 0rem !important;
515    padding-bottom: 0rem !important;
516  }
517
518  .margin-horizontal {
519    margin-top: 0rem !important;
520    margin-bottom: 0rem !important;
521  }
522
523  .padding-horizontal {
524    padding-top: 0rem !important;
525    padding-bottom: 0rem !important;
526  }
527
528  .margin-vertical {
529    margin-right: 0rem !important;
530    margin-left: 0rem !important;
531  }
532
533  .padding-vertical {
534    padding-right: 0rem !important;
535    padding-left: 0rem !important;
536  }
537
538  /* Apply "..." at 100% width */
539  .truncate-width { 
540    width: 100%; 
541    white-space: nowrap; 
542    overflow: hidden; 
543    text-overflow: ellipsis; 
544  }
545  /* Removes native scrollbar */
546  .no-scrollbar {
547    -ms-overflow-style: none;
548    overflow: -moz-scrollbars-none; 
549  }
550
551  .no-scrollbar::-webkit-scrollbar {
552    display: none;
553  }
554
555  .is-disabed{
556    opacity: 0.5;
557    pointer-events: none;
558  }
559
560  .wf-empty {
561    outline: 0px dashed #555 !important;
562    outline-offset: -1px !important;
563    box-shadow: inset 0 0 0 4px rgba(0, 0, 0, 0), inset 0 0 0 4px rgba(255, 255, 255, 0), inset 0 0 0 1px rgba(255, 255, 255, 0);
564    padding-bottom: 75px;
565    padding-right: 75px;
566    font-size: 0;
567    line-height: 0;
568    vertical-align: middle;
569  }
570
571  /*Fluid Responsive Code*/
572  html { font-size: 1rem; }
573  @media screen and (max-width:1440px) { html { font-size: calc(0.4977678571428572rem + 0.5580357142857142vw); } }
574  @media screen and (max-width:992px) { html { font-size: 1rem; } }
575
576
577  /*
578  html { font-size: 1rem; }
579  @media screen and (max-width:1440px) { html { font-size:  calc(0.0758928571428572rem + 1.0267857142857142vw); } }
580  @media screen and (max-width:991px) { html { font-size: calc(0.0006608280254774002rem + 1.9171974522293vw); } }
581  @media screen and (max-width:834px) { html { font-size: calc(-0.003600746268656141rem + 1.925373134328357vw); } }
582  @media screen and (max-width:767px) { html { font-size: calc(0.0007485029940121901rem + 2.6646706586826343vw); } }
583  @media screen and (max-width:600px) { html { font-size: calc(-0.0010330578512397492rem + 2.669421487603306vw); } }
584  @media screen and (max-width:479px) { html { font-size: calc(0.00035112359550615313rem + 4.101123595505616vw); } }
585  @media screen and (max-width:390px) { html { font-size: calc(-0.26587499999999975rem + 5.1933333333333325vw); } }
586  @media screen and (max-width:240px) { html { font-size: 0.513125rem; } }
587  */
588  /* Base: all highlighted countries dimmed */
589  .locations_map-block .highcharts-point {
590    opacity: 0.7;
591    transition: opacity .2s ease;
592  }
593  /* Active (clicked) country */
594  .locations_map-block .highcharts-point.is-active {
595    opacity: 1;
596  }
597
598  .locations_map-block .custom-tooltip {
599    border-radius: 0.2rem;
600    background: #FF6D00;
601    color: #000;
602    font-size: 0.8rem;
603    font-family: var(--_typography---font-styles--tagline);
604    font-weight: 600;
605    line-height: 0.7rem; /* 89% of font size */
606    letter-spacing: 0.035rem;
607    text-transform: uppercase;
608    padding: 0.6rem;
609  }
610
611  .is-disabled{
612    opacity: 0.3;
613  }
614
615  .wf-design-mode .fs-consent_component{
616    display: none;
617  }
618</style></div><div class="color-schemes w-embed"><style>
619.color-scheme-1 {}
620  
621
622.w-slider-dot {
623  background-color: var(--color-scheme-1--text);
624  opacity: 0.20;
625}
626
627.w-slider-dot.w-active {
628  background-color: var(--color-scheme-1--text);
629  opacity: 1;
630}
631
632/* Override .w-slider-nav-invert styles */
633.w-slider-nav-invert .w-slider-dot {
634  background-color: var(--color-scheme-1--text) !important;
635  opacity: 0.20 !important;
636}
637
638.w-slider-nav-invert .w-slider-dot.w-active {
639  background-color: var(--color-scheme-1--text) !important;
640  opacity: 1 !important;
641}
642
643</style></div><div class="css-animations w-embed"><style>
644
645  [data-image-global-ease]{
646    transition-property: all;
647    transition-duration: 380ms;
648    transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
649  }
650
651  .is-active-accordion .benefits-perks_accordion-overlay{
652    opacity: 1;
653  }
654
655  .is-active-accordion .benefits-perks_chevron{
656    transform: rotate(90deg);
657    color: black;
658  }
659
660
661  @media only screen and (min-width: 992px){
662    /*Blog Hover*/
663    .newsroom-render_item:hover .newsroom-render_image, 
664    [data-hover-card="item"]:hover [data-hover-card="image"]{
665      filter: grayscale(0%);
666    }
667
668    [data-hover-card="item"]:hover{
669      transform: translateY(-0.625rem);
670    }
671
672    /*Card Hover Interaction*/
673    [data-image-scale='image'] {
674      transition-property: transform;
675      transition-duration: 540ms;
676      transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
677    }  
678
679    [data-image-scale='card']:hover [data-image-scale='image'] {
680      transform: scale(1.1);
681    } 
682
683    /*Opacity Interactions*/
684    .feature-style-1_card:hover .feature-style-1_background-wrapper,
685    .feature-style-1_card:hover .feature-style-1_image.is-absolute,
686    .game-bacon_item:hover .game-bacon_background-wrapper,
687    .games_item:hover .games_background-wrapper,
688    .games_item:hover .data-games-item,
689    .stats_card:hover .stats_card-overlay,
690    [data-opacity-element="card"]:hover [data-opacity-element="overlay"] {
691      opacity: 1;
692    }
693
694    .games_item:hover .text-style-tagline,
695    [data-hover-card="item"]:hover [data-hover-card="tagline-dark"]{
696      color: black !important;
697    }
698
699
700    .awards-champs_item:hover .awards-champs_shape, 
701    .awards-champs_item:hover .awards-champs_tagline,
702    .programs_item:hover .programs_icon
703    {
704      color: white;
705    }
706
707    .feature-style-1_card:hover .feature-style-1_background-flash,
708    .games_item:hover .games_background-flash{
709      /* transform: translateY(0%); */
710      transform: scale(1);
711    }
712
713    .feature-style-1_card:hover .button, 
714    .games_item:hover .button {
715      background-image: linear-gradient(to bottom, var(--_primitives---colors--white), var(--_primitives---colors--white));
716      color: var(--_primitives---colors--neutral-darkest);
717    }
718  }
719
720  @media only screen and (max-width: 992px){
721    .games_item .games_background-wrapper,
722    .games_item .data-games-item,
723    .feature-style-1_card .button-overlay, 
724    .games_item .button-overlay
725    {
726      opacity: 1;
727    }
728
729    .games_item .text-style-tagline {
730      color: var(--_primitives---colors--blaze-orange);
731    }
732
733    .feature-style-1_card .feature-style-1_background-flash,
734    .games_item .games_background-flash{
735      /* transform: translateY(0%); */
736      transform: scale(1);
737    }
738
739  }
740
741
742</style></div></div><div data-animation="default" class="navbar_component w-nav" data-easing2="ease" fs-scrolldisable-element="smart-nav" data-easing="ease" data-collapse="medium" data-w-id="659f7c84-075d-4fb4-0386-966e523d40ba" role="banner" data-duration="400"><div class="navbar_container"><a href="/" aria-current="page" class="navbar_logo-link w-nav-brand w--current"><img width="252" height="85" alt="Orange lightning bolt logo with AGS letters in black" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894c4313cc655199bed2e13_LOG).avif" loading="eager" class="navbar_logo"/></a><nav role="navigation" class="navbar_menu w-nav-menu"><div class="navbar_menu-left"><div data-delay="50" data-hover="true" data-w-id="66faa694-d73d-3197-2a2c-fc4418b885b8" class="navbar_menu-dropdown w-dropdown"><div class="navbar_dropdown-toggle w-dropdown-toggle"><div class="text-block-8">About</div><div class="dropdown-chevron w-embed">
742<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
743<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
744</svg></div></div><nav class="navbar_dropdown-list w-dropdown-list"><div class="navbar_container"><div class="navbar_dropdown-content"><div class="navbar_dropdown-content-left"><div class="navbar_dropdown-column"><div class="navbar_link-list-title">About AGS</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885c5-523d40ba" href="/company/about-ags" class="navbar_dropdown-link w-inline-block"><div>Mission &amp; History</div></a><a id="w-node-_690212cc-7fd4-d928-c4f2-85cfe1a86d0a-523d40ba" href="/company/leadership" class="navbar_dropdown-link w-inline-block"><div>Leadership &amp; Culture</div></a><a id="w-node-_3ff43c06-64d8-1264-f0ed-77aacfe19b50-523d40ba" href="https://newsroom.playags.com/" class="navbar_dropdown-link w-inline-block"><div>Newsroom</div></a></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Working at AGS</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885cf-523d40ba" href="/company/benefits-perks-offerings" class="navbar_dropdown-link w-inline-block"><div>Benefits, Perks &amp; Offerings</div></a><a id="w-node-_19b4cd10-91c2-0353-021f-483d2c49b995-523d40ba" href="https://jobs.jobvite.com/agscareer" class="navbar_dropdown-link w-inline-block"><div>Open Positions</div></a></div></div></div></div></div></nav></div><div data-delay="50" data-hover="true" data-w-id="66faa694-d73d-3197-2a2c-fc4418b885d5" class="navbar_menu-dropdown w-dropdown"><div class="navbar_dropdown-toggle w-dropdown-toggle"><div class="text-block-11">Slots</div><div class="dropdown-chevron w-embed"><svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
745<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
746</svg></div></div><nav class="navbar_dropdown-list w-dropdown-list"><div class="navbar_container"><div class="navbar_dropdown-content"><div class="navbar_dropdown-content-left"><div class="navbar_dropdown-column"><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885e0-523d40ba" href="/slots" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">About Slots</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885e3-523d40ba" href="/slots/cabinets" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Slot Cabinets</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885e6-523d40ba" href="/slots/rakin-bacon" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Rakin&#x27; Bacon!</div></a><a id="w-node-_4f550f74-3ac2-3537-3787-50176bdeedef-523d40ba" href="/directory" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink navbar_link-list-orangelink">All Games</div></a></div></div><div class="navbar_dropdown-line"></div><div class="navbar_dropdown-column-wrapper"><div id="new-games-nav-bar" class="navbar_dropdown-column"><div class="navbar_link-list-title">New Games</div><div class="w-dyn-list"><div role="list" class="navbar_dropdown-link-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/directory/games/captain-jackpots-voyage" class="navbar_dropdown-link w-inline-block"><div>Captain Jackpots Voyage</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/captain-riches-adventure" class="navbar_dropdown-link w-inline-block"><div>Captain Riches Adventure</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/gold-inferno-wild-stacks" class="navbar_dropdown-link w-inline-block"><div>Gold Inferno Wild Stacks</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/mega-diamond-wild-stacks" class="navbar_dropdown-link w-inline-block"><div>Mega Diamond Wild Stacks</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/imperial-dynasty" class="navbar_dropdown-link w-inline-block"><div>Imperial Dynasty</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/chili-fiesta" class="navbar_dropdown-link w-inline-block"><div>Chili Fiesta</div></a></div></div></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Signature Collections</div><div class="navbar_dropdown-link-list"><a id="w-node-_0ed7b267-2ad6-e101-b129-0911e1dbc3c0-523d40ba" href="https://www.playags.com/directory/games/signature-collection/river-dragons" class="navbar_dropdown-link w-inline-block"><div>River Dragons Collection</div></a><a id="w-node-_0ed7b267-2ad6-e101-b129-0911e1dbc3c3-523d40ba" href="https://www.playags.com/directory/games/signature-collection/rakin-bacon" class="navbar_dropdown-link w-inline-block"><div>Rakin&#x27; Bacon Collection</div></a><a id="w-node-_0ed7b267-2ad6-e101-b129-0911e1dbc3c6-523d40ba" href="https://www.playags.com/directory/games/signature-collection/barnyard" class="navbar_dropdown-link w-inline-block"><div>Barnyard Collection</div></a><a id="w-node-_0ed7b267-2ad6-e101-b129-0911e1dbc3c9-523d40ba" href="https://www.playags.com/directory/games/signature-collection/fu-nan-fu-nu" class="navbar_dropdown-link w-inline-block"><div>Fu Nan Fu Nu Collection</div></a><a id="w-node-_34c848bc-2554-feac-b5ab-96c293f6da7e-523d40ba" href="https://www.playags.com/directory/games/signature-collection/triple-coin-treasures" class="navbar_dropdown-link w-inline-block"><div>Triple Coin Treasures Collection</div></a></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Cabinets</div><div class="navbar_dropdown-link-list"><a id="w-node-_147200e8-f609-1a79-4cb3-a0cf5661eeaf-523d40ba" href="/slots/cabinets/glo" class="navbar_dropdown-link w-inline-block"><div>Glō</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88623-523d40ba" href="/slots/cabinets/spectra" class="navbar_dropdown-link w-inline-block"><div>Spectra</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8861d-523d40ba" href="/slots/cabinets/revel" class="navbar_dropdown-link w-inline-block"><div>Revel</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8861a-523d40ba" href="/slots/cabinets/orion" class="navbar_dropdown-link w-inline-block"><div>Orion</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88620-523d40ba" href="/slots/cabinets/big-red" class="navbar_dropdown-link w-inline-block"><div>Big Red</div></a></div></div></div></div></div></div></nav></div><div data-delay="50" data-hover="true" data-w-id="66faa694-d73d-3197-2a2c-fc4418b88626" class="navbar_menu-dropdown w-dropdown"><div class="navbar_dropdown-toggle w-dropdown-toggle"><div class="text-block-12">Table Products</div><div class="dropdown-chevron w-embed">
746<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
747<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
748</svg></div></div><nav class="navbar_dropdown-list w-dropdown-list"><div class="navbar_container"><div class="navbar_dropdown-content"><div class="navbar_dropdown-content-left"><div id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8862f-523d40ba" class="navbar_dropdown-column"><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88631-523d40ba" href="/tables" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">About Tables</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88634-523d40ba" href="/tables/shufflers" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Shufflers</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88637-523d40ba" href="/directory/tables/felt-content/side-bets" target="_blank" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Felt Content</div></a><a id="w-node-_38ff28f8-7794-d959-fe0e-df5e89eaa865-523d40ba" href="/directory/tables/" target="_blank" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink navbar_link-list-orangelink">All Table Products</div></a></div></div><div id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8863a-523d40ba" class="navbar_dropdown-line"></div><div class="navbar_dropdown-column-wrapper"><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Progressives</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8863f-523d40ba" href="/tables/progressives/stax" class="navbar_dropdown-link w-inline-block"><div>Stax</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88642-523d40ba" href="/tables/progressives/bonus-spin-xtreme" class="navbar_dropdown-link w-inline-block"><div>Bonus Spin Xtreme</div></a></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Shufflers</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88649-523d40ba" href="/directory/tables/table-equipment/pax-s-specialty-game-shuffler" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Pax S</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8864c-523d40ba" href="/directory/tables/table-equipment/dex-s-poker-room-shuffler" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Dex S</div></a></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Popular Games</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88653-523d40ba" href="/directory/tables/progressive-platforms/stax-progressive/royal-9-baccarat" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Royal 9</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88656-523d40ba" href="/directory/tables/progressive-platforms/stax-progressive/jackpot-holdem" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Jackpot Hold’em</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88659-523d40ba" href="/directory/tables/progressive-platforms/stax-progressive/blackjack-match" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Blackjack Match</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8865c-523d40ba" href="/directory/tables/progressive-platforms/stax-progressive/super-4-blackjack" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Super 4 Blackjack</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8865f-523d40ba" href="/directory/tables/felt-content/premium-game/criss-cross-poker" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Criss Cross Poker</div></a></div></div></div></div></div></div></nav></div><div data-delay="300" data-hover="true" data-w-id="66faa694-d73d-3197-2a2c-fc4418b88662" class="navbar_menu-dropdown w-dropdown"><div class="navbar_dropdown-toggle w-dropdown-toggle"><div class="text-block-9">Online Gaming</div><div class="dropdown-chevron w-embed">
748<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
749<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/>
750</svg></div></div><nav class="navbar_dropdown-list w-dropdown-list"><div class="navbar_container"><div class="navbar_dropdown-content"><div class="navbar_dropdown-content-left"><div id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8866b-523d40ba" class="navbar_dropdown-column"><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8866d-523d40ba" href="/online-gaming" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">About AGSi</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88670-523d40ba" href="/online-gaming/omnichannel" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Omnichannel</div></a></div></div><div id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88673-523d40ba" class="navbar_dropdown-line"></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Real-Money Online Games</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88678-523d40ba" href="https://interactive.playags.com/game-types/video-slots/" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Video Slots</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8867b-523d40ba" href="https://interactive.playags.com/game-types/steppers/" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Steppers</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8867e-523d40ba" href="https://interactive.playags.com/game-types/ultratap/" target="_blank" class="navbar_dropdown-link w-inline-block"><div>UltraTap</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88681-523d40ba" href="https://interactive.playags.com/game-types/table-games/" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Table Games</div></a></div></div></div></div></div></nav></div></div><div class="navbar_menu-right"><a href="https://jobs.jobvite.com/agscareer" class="navbar_dropdown-toggle open-positions">Open Positions</a><div class="navbar_form-wrapper w-form"><form id="email-form-2" name="email-form-2" data-name="Email Form 2" method="get" data-search-canvas="form" class="navbar_form" data-wf-page-id="68a742cc2e51325fb51b1f37" data-wf-element-id="41ecb425-273b-a98a-38ec-2170064dbf0c"><div class="navbar_input-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 28 28" fill="none" vector-effect="non-scaling-stroke" preserveAspectRatio="none" class="navbar_search"><circle cx="13.5108" cy="12.8925" r="6.68211" transform="rotate(-45 13.5108 12.8925)" stroke="currentColor" stroke-width="1.5"></circle><line x1="18.3694" y1="17.3083" x2="23.9339" y2="22.8728" stroke="currentColor" stroke-width="1.5"></line></svg><input class="navbar_input-v2 w-input" maxlength="256" name="name" data-name="Name" placeholder="Search" data-search-canvas="input" type="text" id="header-search"/></div><input type="submit" data-wait="Please wait..." aria-label="Search button" data-search-canvas="button" class="navbar_form_button w-button" value=""/></form><div class="w-form-done"><div>Thank you! Your submission has been received!</div></div><div class="w-form-fail"><div>Oops! Something went wrong while submitting the form.</div></div></div><a aria-label="Contact us" href="https://portal.playags.com/login" class="navbar_contact-button w-inline-block"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24" fill="none" vector-effect="non-scaling-stroke" preserveAspectRatio="none" class="navbar_contact-icon"><g opacity="0.5"><path d="M5.12104 17.8037C7.15267 16.6554 9.4998 16 12 16C14.5002 16 16.8473 16.6554 18.879 17.8037M15 10C15 11.6569 13.6569 13 12 13C10.3431 13 9 11.6569 9 10C9 8.34315 10.3431 7 12 7C13.6569 7 15 8.34315 15 10ZM21 12C2
7501 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></g></svg></a></div></nav><div class="navbar_menu-button w-nav-button"><div class="menu-icon3"><div class="menu-icon3_line-top"></div><div class="menu-icon3_line-middle"></div><div class="menu-icon3_line-bottom"></div></div></div></div></div><main class="main-wrapper"><header class="section_slots-header"><div class="padding-global"><div class="container-large"><div class="slots-header_component"><div class="w-layout-grid slots-header_content"><div class="slots-header_content-left"><div class="text-style-tagline">Slots. TABLES. ONLINE.</div><div class="spacer-xsmall"></div><h1 class="slots-header_heading"><div class="slots-header_rotate_wrapper"><span data-text-rotate="track" class="slots-header_rotate_track"><span class="slots-header_text">Slot</span><span class="slots-header_text">Table</span><span class="slots-header_text">Online</span><span class="slots-header_text">Slot</span></span></div><span class="slots-header_text">GAMES</span><span class="slots-header_text">THAT HIT</span></h1></div><div id="w-node-d670abfb-9bce-3ef0-de44-b6e89b9ce4a4-b51b1f37" class="slots-header_image-wrapper"><div class="slots-header_image-int"><img class="slots-header_element is-1" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68f010f7791169b79d98cbd0_7aad2b883833609de9747594e0c71917_fk4uap3qcytds7jsja9y.avif" width="405" height="405" alt="Shiny golden piggy bank with a large dollar sign on its side." sizes="(max-width: 479px) 105px, (max-width: 991px) 49vw, 405px" data-w-id="80f3d70d-33c3-923f-4444-37eac15e154f" loading="eager" fetchpriority="high" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68f010f7791169b79d98cbd0_7aad2b883833609de9747594e0c71917_fk4uap3qcytds7jsja9y-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68f010f7791169b79d98cbd0_7aad2b883833609de9747594e0c71917_fk4uap3qcytds7jsja9y.avif 810w"/><img class="slots-header_element is-2" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed245b42befd11abac0f_0c86bb1474e56316cf7ac961a37c78d3_Dragon%20Green%201.avif" width="623" height="621" alt="Green AGS dragon with blue eyes, yellow spikes, and fiery tail" sizes="(max-width: 479px) 105px, 49vw" data-w-id="2fa6f405-3672-ac43-6ea5-4f7b0ac75f85" loading="eager" fetchpriority="high" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed245b42befd11abac0f_0c86bb1474e56316cf7ac961a37c78d3_Dragon%20Green%201-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed245b42befd11abac0f_0c86bb1474e56316cf7ac961a37c78d3_Dragon%20Green%201-p-800.avif 800w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed245b42befd11abac0f_0c86bb1474e56316cf7ac961a37c78d3_Dragon%20Green%201.avif 1246w"/><img class="slots-header_element is-3" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed24638caa9b7c341696_2be750d9c118a4926eeb534c94f2cd0b_DonkeyStage3%201.avif" width="551" height="551" alt="Colorful AGS cartoon pinata with cute horse-like character in red and yellow" sizes="(max-width: 479px) 105px, 49vw" data-w-id="54fa2044-e33e-aea0-3216-49b681c686d3" loading="eager" fetchpriority="high" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed24638caa9b7c341696_2be750d9c118a4926eeb534c94f2cd0b_DonkeyStage3%201-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed24638caa9b7c341696_2be750d9c118a4926eeb534c94f2cd0b_DonkeyStage3%201.avif 1101w"/></div></div></div></div></div></div><div class="slots-header_shape-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 953 911" fill="none" vector-effect="non-scaling-stroke" preserveAspectRatio="none" class="slots-header_shape hide"><g clip-path="url(#clip0_5001_1235)"><g clip-path="url(#clip1_5001_1235)"><path d="M127.535 911L378.019 419H220.258C218.696 419 217.684 417.347 218.389 415.951L467.528 -73H1075.54V911
750H127.535Z" fill="white"></path></g></g></svg><div data-is-ix2-target="1" class="lottie-animation" data-w-id="4edc1686-c6e6-8099-d52b-28229dae52c8" data-animation-type="lottie" data-src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68cb1536aace7f380514f29b_Stackit-Lightening.json" data-loop="0" data-direction="1" data-autoplay="0" data-renderer="svg" data-default-duration="0" data-duration="3" data-loading="eager" data-ix2-initial-state="0"></div></div></header><section class="section_content-style-1"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div data-text-parallax="" class="content-style-1_component"><div class="max-width-xlarge align-center"><div class="text-style-tagline">FORTUNE FAVORS THE BOLT</div><div class="spacer-xsmall"></div><h2 class="heading-style-h4 is-small-mobile text-style-body">Meet the highest performing team and products in modern gaming. Since 2005 we’ve worked closely with operators to deliver the most electrifying gaming experiences in the world. <br/><span class="text-weight-semibold">At AGS, we win together.</span></h2><div class="spacer-medium"></div><div class="max-width-large is-wider align-center"><a data-opacity-element="card" data-wf--button--variant="base" href="/company/about-ags" class="button w-inline-block"><div class="button-text">Go bolt</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div></div></div></div></div></div></section><section class="section_games"><div class="padding-global"><div class="container-large"><div class="padding-section-medium"><div class="games_component"><div class="w-layout-grid games_item"><div class="games_image-wrapper is-6"><div class="games_image is-slots-1-absolute"><canvas data-src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e3db43e4e4ec745c6f62a5_ags_slot_machine.riv" data-type="scroll" data-state-machine="State Machine 1" data-artboard="Artboard" data-autoplay="true" data-scroll-threshold="0.4" class="rive-animation is-slots-1-absolute-rive"></canvas></div><img width="420" height="148" alt="Three cartoon piggy banks on a large pile of gold coins, each with distinct accessories and expressions." src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68ff9f691428cd8958637dc4_ThreePigs_Performant.avif" loading="eager" class="games_image is-slots-1"/></div><div class="games_content-left"><div class="text-style-tagline">POWER UP YOUR SLOTS</div><div class="spacer-xsmall"></div><h2 class="heading-style-h1">Striking slots</h2><div class="spacer-small"></div><p class="text-size-medium">Every spin loaded. Every jackpot explosive. Our slot games leverage razor-sharp intuition to give you that raw, untamed thrill.</p><div class="spacer-medium"></div><div class="button-group"><a data-opacity-element="card" data-wf--button--variant="base" href="/slots" class="button w-inline-block"><div class="button-text">SPIN THAT THING</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div></div><div class="games_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="games_background-flash"/></div></div><div class="w-layout-grid games_item is-alternate"><div class="games_image-wrapper is-slots-2"><img width="562" height="1051" alt="Red Dragon gambling wheel with progressive jackpot and betting options" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a757459ab3bb2de217e203_red%20dragon.avif" loading="eager" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a757459ab3bb2de217e203_red%20dragon-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a757459ab3bb2de217e203_red%20dragon.avif 1124w" sizes="(max-width: 479px) 48vw, 49vw" class="games_image is-slots-2"/></div><div class="games_content-left is-alternate"><div class="text-style-tagline">FEEL THE BOLT</div><div class="spacer-xsmall"></div><h2 class="heading-style-h1">Electrifying<br/>Tables</h2><div class="spacer-small"></div><p class="text-size-medium">Where calculated risks meet pure chance, our table games deliver that real deal experience that keeps your heart racing. </p><div class="spacer-medium"></div><div class="button-group"><a data-opacity-element="card" data-wf--button--variant="base" href="/tables" class="button w-inline-block"><div class="button-text">Light Up</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div></div><div class="games_background-wrapper is-alternate"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="games_background-flash is-alternate"/></div></div><div class="w-layout-grid games_item"><div class="games_image-wrapper is-slots-3"><img width="167" height="209" alt="Smartphone screen displaying the Diamond Rush game with prize amounts $3,000, $500, and $100 in the Diamond District section." src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68ffa7296a32ded55c2be815_DiamondRush_Performant.avif" loading="eager" class="games_image is-slots-3-absolute"/><img width="420" height="305" alt="Smartphone screen displaying a Money Charge Bonus Capital Gains game with prize tiers: $10,000 grand, $500 major, $50 minor, $10 mini, and option to select a vault." src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68ffa729c788ad02a2176e42_MoneyCharge_Performant.avif" loading="eager" class="games_image is-slots-3"/><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68ffa729bd7668f47b76be15_Sparkle_Performant.avif" loading="lazy" width="112" height="109" alt="Three golden sparkling stars with a glowing effect on a transparent background." class="games_image is-slot-3-glow"/></div><div class="games_content-left is-wider"><div class="text-style-tagline">Playing it Forward</div><div class="spacer-xsmall"></div><h2 class="heading-style-h1">CHARGE UP YOUR INTERACTIVE</h2><div class="spacer-small"></div><p class="text-size-medium">We don&#x27;t just push boundaries, we obliterate them. Our interactive solutions merge digital with wild innovation that keeps you absolutely locked in.</p><div class="spacer-medium"></div><div class="button-group"><a data-opacity-element="card" data-wf--button--variant="base" href="/online-gaming" class="button w-inline-block"><div class="button-text">INTO THE FUTURE</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div></div><div class="games_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="games_background-flash"/></div></div></div></div></div></div><div class="css-animations w-embed"><style>
751  @media only screen and (min-width: 992px){
752    /*Game Section Interactions*/
753
754    .games_item:hover .games_image.is-slots-1-absolute {
755      transform: scale(1) translateY(-5%);
756      opacity: 1;
757    }
758
759    .games_item:hover .games_image.is-slots-2-absolute{
760      opacity: 1;
761    }
762
763    .games_item:hover .games_image.is-slot-3-glow{
764      opacity: 1;
765    }
766
767    .games_item:hover .games_image.is-slots-3-absolute{
768      transform: translateX(13%);
769    }
770
771
772    .games_item:hover .games_image.is-3 , .games_item:hover .games_image.is-4 {
773      transform: scale(1.03) translateY(-5%);
774    }
775
776    .games_item:hover .games_image.is-5 {
777      transform: scale(1.03) translateY(-5%);
778    }
779
780    .games_item:hover .games_image.is-5-1 {
781      transform: translateX(32%) rotate(12deg) scale(0.85);
782    }
783
784    .games_item:hover .games_image.is-5-2 {
785      transform: translateX(-32%) rotate(-12deg) scale(0.85);
786    }
787
788  }
789</style></div></section><section class="section_stats"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="stats_component"><div class="max-width-large"><div class="text-style-tagline">Striking performance</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">IT JUST HITS</h2></div><div class="spacer-large"></div><div class="stats_grid"><div id="w-node-_4a3ea43f-71f7-0a3a-ad91-4517c00f7f91-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">40K+</h3><p class="text-size-xlarge is-small-tablet">Active AGS slot games deployed worldwide</p></div><div class="stats_card-overlay"></div></div><div id="w-node-c31d3cf0-eb30-b846-006f-c08cae2d6c8d-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">800+</h3><p class="text-size-xlarge is-small-tablet">Total AGS products developed — slots, cabinets, tables, and online content</p></div><div class="stats_card-overlay"></div></div><div id="w-node-b46a60fc-f5a4-bc71-8753-c71b76954750-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">600+</h3><p class="text-size-xlarge is-small-tablet">Casino and operator partners around the globe</p></div><div class="stats_card-overlay"></div></div><div id="w-node-_24a30f64-5b86-d00f-d385-d35650f07801-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">25</h3><p class="text-size-xlarge is-small-tablet">Countries with AGS products live across slots, tables, interactive, and lottery</p></div><div class="stats_card-overlay"></div></div><div id="w-node-_2ff2a86a-caaf-92c0-ebf6-a6b959e004e4-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">10</h3><p class="text-size-xlarge is-small-tablet">In-house game studios fueling slot &amp; online innovation</p></div><div class="stats_card-overlay"></div></div></div></div></div></div></div></section><section class="section_feature-style-1 text-style-wrap-balance"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="feature-style-1_component"><div><div class="text-style-tagline">Pure entertainment. <span class="text-style-block-mobile">At your service.</span></div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">OPTIONS FOR EVERY <span class="text-style-block-mobile">INCH OF YOUR FLOOR</span></h2></div><div class="spacer-large"></div><div class="feature-style-1_grid"><div class="feature-style-1_card"><div class="feature-style-1_card-in"><h3 class="heading-style-h2">SLOT <br/>CABINETS</h3><p class="text-size-medium">Signature lighting that strikes across the floor.</p><a data-opacity-element="card" data-wf--button--variant="base" href="/slots/cabinets" class="button w-inline-block"><div class="button-text">LIGHT UP</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77cb49445fabe8c9889b0_2436ee4c0e29bf5f638caa83ebd33409_Slot%20Cabinets.avif" loading="lazy" width="356" height="550" alt="Bacon Link slot machine with golden pig and $10,000 jackpot display" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77cb49445fabe8c9889b0_2436ee4c0e29bf5f638caa83ebd33409_Slot%20Cabinets-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77cb49445fabe8c9889b0_2436ee4c0e29bf5f638caa83ebd33409_Slot%20Cabinets.avif 712w" sizes="(max-width: 479px) 100vw, 356px" class="feature-style-1_image"/><div class="feature-style-1_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="feature-style-1_background-flash"/></div></div><div class="feature-style-1_card"><div class="feature-style-1_card-in"><h3 class="heading-style-h2">CARD <br/>SHUFFLERS</h3><p class="text-size-medium">Precision-engineered for reliable performance.</p><a data-opacity-element="card" data-wf--button--variant="base" href="/tables/shufflers" class="button w-inline-block"><div class="button-text">DEAL ME IN</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77d2
789c2465ea0b93f7d75f_card%20shufflers.avif" loading="lazy" width="464" height="550" alt="Black electronic device with open lid and complex internal components" class="feature-style-1_image is-2"/><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a79cc8d1f6748c13193491_stars.avif" loading="lazy" width="473" height="574" alt="Sparkling yellow star-like light bursts scattered on white background" class="feature-style-1_image is-absolute"/><div class="feature-style-1_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="feature-style-1_background-flash"/></div></div></div></div></div></div></div></section><section class="section_feature-style-2"><div class="w-layout-grid feature-style-2_component"><div id="w-node-ce298aac-2d73-bfd3-6568-f2649a97ef3b-b51b1f37" class="feature-style-2_content"><div class="feature-style-2_content-in"><div class="text-style-tagline">Game Here Now</div><div class="spacer-small"></div><h2 class="heading-style-h2"><span class="text-style-block-desktop">Wherever </span>Players Game</h2><div class="spacer-small"></div><p class="text-size-large">Online or on-site, we deliver exceptional real-money gaming experiences across every environment to keep the electricity alive.</p><div class="spacer-small"></div><a data-opacity-element="card" data-wf--button--variant="is-light" href="/online-gaming/omnichannel" class="button w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489 w-inline-block"><div class="button-text">See Omnichannel</div><div data-opacity-element="overlay" class="button-overlay w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489"></div></a></div></div><div class="feature-style-2_image-wrapper"><img width="762" height="691" alt="Triple Treasure slot machine with progressive jackpot and mobile app display" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77f5b7804d628a4414938_onmi%20image.avif" loading="eager" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77f5b7804d628a4414938_onmi%20image-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77f5b7804d628a4414938_onmi%20image.avif 1524w" sizes="(max-width: 479px) 48vw, 49vw" class="feature-style-2_image"/></div></div></section><section class="section_locations"><div class="padding-global"><div class="container-large"><div class="padding-section-medium"><div class="locations_component"><div class="locations_top-content"><div class="text-style-tagline">bolt around the world</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">found wherever there’s high-voltage</h2></div><div data-current="all" data-easing="ease" data-duration-in="300" data-duration-out="100" class="locations_tabs w-tabs"><div class="locations_tab-menu w-tab-menu"><a data-w-tab="all" class="locations_tab-link w-inline-block w-tab-link w--current"><div>ALL</div></a><a data-w-tab="slots" class="locations_tab-link w-inline-block w-tab-link"><div>Slots</div></a><a data-w-tab="online gaming" class="locations_tab-link w-inline-block w-tab-link"><div>Online GAMING</div></a><a data-w-tab="tables" class="locations_tab-link w-inline-block w-tab-link"><div>Tables</div></a><a data-w-tab="lottery" class="locations_tab-link w-inline-block w-tab-link"><div>Lottery</div></a></div><div class="locations_tab-content w-tab-content"><div data-w-tab="all" class="locations_tab-pane w-tab-pane w--tab-active"><div class="locations_map-block"><div data-country-value="" id="w-node-_62e32a6b-1b9d-6bf5-9e49-673acd39714d-b51b1f37" class="locations_text">Global gaming supplier of high-performing slots, tables, online games, and lottery.</div><div id="w-node-_62e32a6b-1b9d-6bf5-9e49-673acd39719e-b51b1f37" class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div class="locations_table-wrapper"><div class="text-style-tagline text-color-white">AGS LOCATIONS</div><div data-map-country-wrapper="" class="locations_table"><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="USA" class="locations_table-item"><span>USA</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ARG" class="locations_table-item"><span>Argentina</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="CAN" class="locations_table-item"><span>Canada</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ABW" class="locations_table-item"><span>Aruba</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="MEX" class="locations_table-item"><span>Mexico</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="BES" class="locations_table-item"><span>Bonaire</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="AUS" class="locations_table-item"><span>Australia</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="CHL" class="locations_table-item"><span>Chile</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="GBR" class="locations_table-item"><span>England</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="CUR" class="locations_table-item"><span>Curacao</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="CYP" class="locations_table-item"><span>Cyprus</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="MYS" class="locations_table-item"><span>Malaysia</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PRI" class="locations_table-item"><span>Puerto Rico</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PAN" class="locations_table-item"><span>Panama</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="BRA" class="locations_table-item"><span>Brazil</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PRY" class="locations_table-item"><span>Paraguay</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="COL" class="locations_table-item"><span>Colombia</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PER" class="locations_table-item"><span>Peru</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ITA" class="locations_table-item"><span>Italy</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PHL" class="locations_table-item"><span>Philippines</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ROU" class="locations_table-item"><span>Romania</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ZAF" class="locations_table-item"><span>South Africa</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="MLT" class="locations_table-item"><span>Malta</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="SMA" class="locations_table-item"><span>St Martin</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="FIN" class="locations_table-item"><span>Finland</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="URY" class="locations_table-item"><span>Uruguay</span></div></div></div></div></div><div data-w-tab="slots" class="locations_tab-pane w-tab-pane"><div data-wf--slots-map--variant="base" class="locations_map-block"><div data-country-value="" id="w-node-_055d88b1-abfa-cb11-1983-22f72f94631d-2f94631c" class="locations_text">Class II, Class III, and historical horse racing games for markets worldwide.</div><div id="w-node-_055d88b1-abfa-cb11-1983-22f72f946353-2f94631c" class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div data-map-country-wrapper="" id="w-node-_055d88b1-abfa-cb11-1983-22f72f94631f-2f94631c" class="locations_table is-slots"><div data-value="Offering Class II, Class III, and HHR games nationwide, delivering high-performing slots to diverse casino markets." data-map-country-selector=" " data-code="USA" class="locations_table-item"><span>USA</span></div><div data-value="Supplying Class II and Class III slot experiences built for Canadian players and operator needs." data-map-country-selector=" " data-code="CAN" class="locations_table-item"><span>Canada</span></div><div data-value="Bringing Class II and Class III games to Mexican casinos, blending local appeal with global performance." data-map-country-selector=" " data-code="MEX" class="locations_table-item"><span>Mexico</span></div><div data-value="Delivering Class III slots to Puerto Rican casinos, combining engaging play with reliable results." data-map-country-selector=" " data-code="PRI" class="locations_table-item"><span>Puerto Rico</span></div><div data-value="Bringing Class III slots to Argentina’s gaming floors, tuned for local player preferences." data-map-country-selector=" " data-code="ARG" class="locations_table-item"><span>Argentina</span></div><div data-value="Delivering Class III slot entertainment to Aruba’s vibrant resort and casino market." data-map-country-selector=" " data-code="ABW" class="locations_table-item"><span>Aruba</span></div><div data-value="Offering Class III slot games to Bonaire’s casino players and visitors." data-map-country-selector=" " data-code="BES" class="locations_table-item"><span>Bonaire</span></div><div data-value="Supplying top-performing Class III slot content to Chile’s land-based casino market." data-map-country-selector=" " data-code="CHL" class="locations_table-item"><span>Chile</span></div><div data-value="Providing Class III slot entertainment for Curacao’s bustling casino industry." data-map-country-selector=" " data-code="CUR" class="locations_table-item"><span>Curacao</span></div><div data-value="Delivering Class III slot games designed for Malaysia’s dynamic casino environment." data-map-country-selector=" " data-code="MYS" class="locations_table-item"><span>Malaysia</span></div><div data-value="Bringing Class III slot innovation to Panama’s casino operators and players." data-map-country-selector=" " data-code="PAN" class="locations_table-item"><span>Panama</span></div><div data-value="Supplying Class III slots to Paraguay’s growing land-based gaming market." data-map-country-selector=" " data-code="PRY" class="locations_table-item"><span>Paraguay</span></div><div data-value="Delivering engaging Class III slot experiences to casinos across Peru." data-map-country-selector=" " data-code="PER" class="locations_table-item"><span>Peru</span></div><div data-value="Offering Class III slot content tailored for the Philippines’ diverse gaming venues." data-map-country-selector=" " data-code="PHL" class="locations_table-item"><span>Philippines</span></div><div data-value="Supplying historical horse racing games to South Africa’s gaming market with strong player appeal." data-map-country-selector=" " data-code="ZAF" class="locations_table-item"><span>South Africa</span></div><div data-value="Bringing Class III slot entertainment to St Martin’s casino scene." data-map-country-selector=" " data-code="SMA" class="locations_table-item"><span>St Martin</span></div><div data-value="Class II, Class III, and historical horse racing games for markets worldwide." data-map-country-selector=" " data-code="URY" class="locations_table-item"><span>Uruguay</span></div></div></div></div><div data-w-tab="online gaming" class="locations_tab-pane w-tab-pane"><div class="locations_map-block"><div data-country-value="" id="w-node-ec297568-53e0-1fdd-08fa-33d0c50a1400-c50a13ff" class="locations_text">Real-money online slots, table games, and instant win titles for global markets.</div><div class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div data-map-country-wrapper="" class="locations_table is-og"><div data-value="Offering Class III slots, table games, and instant win titles to real-money online casino operators across the country." data-map-country-selector=" " data-code="USA" class="locations_table-item"><span>USA</span></div><div data-value="Providing real-money online games to licensed operators serving Canadian players." data-map-country-selector=" " data-code="CAN" class="locations_table-item"><span>Canada</span></div><div data-value="Delivering real-money online games to operators in Mexico’s growing market." data-map-country-selector=" " data-code="MEX" class="locations_table-item"><span>Mexico</span></div><div data-value="Supplying real-money online games to licensed gaming operators in England." data-map-country-selector=" " data-code="GBR" class="locations_table-item"><span>England</span></div><div data-value="Offering real-money online games in Portuguese for Brazil’s regulated gam
789ing market." data-map-country-selector=" " data-code="BRA" class="locations_table-item"><span>Brazil</span></div><div data-value="Delivering real-money online games to licensed operators across Colombia." data-map-country-selector=" " data-code="COL" class="locations_table-item"><span>Colombia</span></div><div data-value="Providing real-money online games to regulated gaming operators in Italy." data-map-country-selector=" " data-code="ITA" class="locations_table-item"><span>Italy</span></div><div data-value="Supplying real-money online games to licensed casino operators in Romania." data-map-country-selector=" " data-code="ROU" class="locations_table-item"><span>Romania</span></div><div data-value="Offering real-money online games to operators based in Malta’s gaming hub." data-map-country-selector=" " data-code="MLT" class="locations_table-item"><span>Malta</span></div><div data-value="Delivering real-money online games to licensed operators serving Finland." data-map-country-selector=" " data-code="FIN" class="locations_table-item"><span>Finland</span></div></div></div></div><div data-w-tab="tables" class="locations_tab-pane w-tab-pane"><div data-wf--tables-map--variant="base" class="locations_map-block"><div data-country-value="" id="w-node-_5cef56c3-2d20-e63a-9bd8-0d4463ef26ef-63ef26ee" class="locations_text">Progressives, shufflers, side bets, and table equipment for casino floors.</div><div class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div data-map-country-wrapper="" class="locations_table is-tables"><div data-value="Offering award-winning progressive systems, card shufflers, side bets, premium felts, and table game equipment nationwide." data-map-country-selector=" " data-code="USA" class="locations_table-item"><span>USA</span></div><div data-value="Providing progressive systems, card shufflers, side bets, premium felts, and table equipment to casinos across Canada." data-map-country-selector=" " data-code="CAN" class="locations_table-item"><span>Canada</span></div><div data-value="Delivering card shufflers and progressive systems to casinos in Mexico." data-map-country-selector=" " data-code="MEX" class="locations_table-item"><span>Mexico</span></div><div data-value="Offering premium table games, shufflers, progressive systems, and side bets to casinos in Australia." data-map-country-selector=" " data-code="AUS" class="locations_table-item"><span>Australia</span></div><div data-value="Bringing engaging side bet options to casino tables in Puerto Rico." data-map-country-selector=" " data-code="PRI" class="locations_table-item"><span>Puerto Rico</span></div></div></div></div><div data-w-tab="lottery" class="locations_tab-pane w-tab-pane"><div class="locations_map-block"><div data-country-value="" id="w-node-_63ebd47e-1977-f74f-2289-a3b46cbde9de-6cbde9dd" class="locations_text">Game content designed for state and municipal lottery programs.</div><div class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div data-map-country-wrapper="" class="locations_table"><div data-value="Game content designed for state and municipal lottery programs." data-map-country-selector=" " data-code="BRA" class="locations_table-item"><span>Brazil</span></div></div></div></div></div></div></div></div></div></div></section><section class="section_newsroom-render"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="newsroom-render_component"><div class="max-width-large"><div class="text-style-tagline">The Latest on AGS</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">Real experience. Wild innovation.</h2><div class="spacer-xsmall"></div><p class="text-size-large">News on the gaming industry’s wild card.</p></div><div class="spacer-large"></div><div class="newsroom-render_list-wrapper"><div class="newsroom-render_list"></div></div><div><div class="spacer-xlarge"></div><div class="button-group"><a data-opacity-element="card" data-wf--button--variant="is-light" href="https://newsroom.playags.com/" target="_blank" class="button w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489 w-inline-block"><div class="button-text">SEE THE LATEST</div><div data-opacity-element="overlay" class="button-overlay w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489"></div></a></div></div></div></div></div></div></section><section data-swiper-slider-wf="media" class="section_media"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="media_component"><div><div class="text-style-tagline">CHANGING THE GAME</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">Always in it for THE Pure Entertainment</h2></div><div class="spacer-large"></div><div><div class="w-embed w-script"><!-- Elfsight Social Feed | AGS Social Feed (main) - LAZY LOADED FOR PERFORMANCE -->
790<div class="elfsight-app-e193ac26-5cf6-4172-8f79-0f7db8b2aef3" data-elfsight-app-lazy>
791  <div style="padding: 60px 20px; text-align: center; color: #999; font-size: 14px;">
792    Loading social feed...
793  </div>
794</div>
795
796<script>
797// Lazy load Elfsight on user interaction
798(function() {
799  let elfsightLoaded = false;
800  
801  function loadElfsightNow() {
802    if (elfsightLoaded) return;
803    elfsightLoaded = true;
804    
805    const script = document.createElement('script');
806    script.src = 'https://elfsightcdn.com/platform.js';
807    script.defer = true;
808    document.body.appendChild(script);
809  }
810  
811  // Expose function globally so main performance script can call it
812  window.loadElfsight = loadElfsightNow;
813  
814  // Fallback: if main script doesn't exist, load on scroll
815  window.addEventListener('scroll', function() {
816    if (window.scrollY > 300) {
817      loadElfsightNow();
818    }
819  }, { once: true, passive: true });
820})();
821</script>
821</div></div><div class="spacer-small"></div><div class="social-icons_component"><div class="w-layout-grid social-icons_list"><a aria-label="Social Handle" href="https://www.linkedin.com/company/american-gaming-systems" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
822<path fill-rule="evenodd" clip-rule="evenodd" d="M4.5 3C3.67157 3 3 3.67157 3 4.5V19.5C3 20.3284 3.67157 21 4.5 21H19.5C20.3284 21 21 20.3284 21 19.5V4.5C21 3.67157 20.3284 3 19.5 3H4.5ZM8.52076 7.00272C8.52639 7.95897 7.81061 8.54819 6.96123 8.54397C6.16107 8.53975 5.46357 7.90272 5.46779 7.00413C5.47201 6.15897 6.13998 5.47975 7.00764 5.49944C7.88795 5.51913 8.52639 6.1646 8.52076 7.00272ZM12.2797 9.76176H9.75971H9.7583V18.3216H12.4217V18.1219C12.4217 17.742 12.4214 17.362 12.4211 16.9819V16.9818V16.9816V16.9815V16.9812C12.4203 15.9674 12.4194 14.9532 12.4246 13.9397C12.426 13.6936 12.4372 13.4377 12.5005 13.2028C12.7381 12.3253 13.5271 11.7586 14.4074 11.8979C14.9727 11.9864 15.3467 12.3141 15.5042 12.8471C15.6013 13.1803 15.6449 13.5389 15.6491 13.8863C15.6605 14.9339 15.6589 15.9815 15.6573 17.0292V17.0294C15.6567 17.3992 15.6561 17.769 15.6561 18.1388V18.3202H18.328V18.1149C18.328 17.6629 18.3278 17.211 18.3275 16.7591V16.759V16.7588C18.327 15.6293 18.3264 14.5001 18.3294 13.3702C18.3308 12.8597 18.276 12.3563 18.1508 11.8627C17.9638 11.1286 17.5771 10.5211 16.9485 10.0824C16.5027 9.77019 16.0133 9.5691 15.4663 9.5466C15.404 9.54401 15.3412 9.54062 15.2781 9.53721L15.2781 9.53721L15.2781 9.53721C14.9984 9.52209 14.7141 9.50673 14.4467 9.56066C13.6817 9.71394 13.0096 10.0641 12.5019 10.6814C12.4429 10.7522 12.3852 10.8241 12.2991 10.9314L12.2991 10.9315L12.2797 10.9557V9.76176ZM5.68164 18.3244H8.33242V9.76733H5.68164V18.3244Z" fill="CurrentColor"/>
823</svg></div></a><a aria-label="Social Handle" href="https://www.facebook.com/AmericanGamingSystems" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
824<path d="M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3088 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1739V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.083 22 12.0611Z" fill="CurrentColor"/>
825</svg></div></a><a aria-label="Social Handle" href="https://www.youtube.com/user/AmericanGamingSys" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
826<path fill-rule="evenodd" clip-rule="evenodd" d="M20.5686 4.77345C21.5163 5.02692 22.2555 5.76903 22.5118 6.71673C23.1821 9.42042 23.1385 14.5321 22.5259 17.278C22.2724 18.2257 21.5303 18.965 20.5826 19.2213C17.9071 19.8831 5.92356 19.8015 3.40294 19.2213C2.45524 18.9678 1.71595 18.2257 1.45966 17.278C0.827391 14.7011 0.871044 9.25144 1.44558 6.73081C1.69905 5.78311 2.44116 5.04382 3.38886 4.78753C6.96561 4.0412 19.2956 4.282 20.5686 4.77345ZM9.86682 8.70227L15.6122 11.9974L9.86682 15.2925V8.70227Z" fill="CurrentColor"/>
827</svg></div></a><a aria-label="Social Handle" href="https://www.instagram.com/play_ags/" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
828<path fill-rule="evenodd" clip-rule="evenodd" d="M16 3H8C5.23858 3 3 5.23858 3 8V16C3 18.7614 5.23858 21 8 21H16C18.7614 21 21 18.7614 21 16V8C21 5.23858 18.7614 3 16 3ZM19.25 16C19.2445 17.7926 17.7926 19.2445 16 19.25H8C6.20735 19.2445 4.75549 17.7926 4.75 16V8C4.75549 6.20735 6.20735 4.75549 8 4.75H16C17.7926 4.75549 19.2445 6.20735 19.25 8V16ZM16.75 8.25C17.3023 8.25 17.75 7.80228 17.75 7.25C17.75 6.69772 17.3023 6.25 16.75 6.25C16.1977 6.25 15.75 6.69772 15.75 7.25C15.75 7.80228 16.1977 8.25 16.75 8.25ZM12 7.5C9.51472 7.5 7.5 9.51472 7.5 12C7.5 14.4853 9.51472 16.5 12 16.5C14.4853 16.5 16.5 14.4853 16.5 12C16.5027 10.8057 16.0294 9.65957 15.1849 8.81508C14.3404 7.97059 13.1943 7.49734 12 7.5ZM9.25 12C9.25 13.5188 10.4812 14.75 12 14.75C13.5188 14.75 14.75 13.5188 14.75 12C14.75 10.4812 13.5188 9.25 12 9.25C10.4812 9.25 9.25 10.4812 9.25 12Z" fill="CurrentColor"/>
829</svg></div></a><a aria-label="Social Handle" href="https://x.com/PlayAGS" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed">
829<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
830<path d="M17.1761 4H19.9362L13.9061 10.7774L21 20H15.4456L11.0951 14.4066L6.11723 20H3.35544L9.80517 12.7508L3 4H8.69545L12.6279 9.11262L17.1761 4ZM16.2073 18.3754H17.7368L7.86441 5.53928H6.2232L16.2073 18.3754Z" fill="CurrentColor"/>
831</svg></div></a></div></div></div></div></div></div><div class="ui-background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a789c09f11aedd8076f5f2_dark%20shape.avif" loading="lazy" width="1280" height="1363" alt="Black geometric shapes with sharp angular lines and high contrast" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a789c09f11aedd8076f5f2_dark%20shape-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a789c09f11aedd8076f5f2_dark%20shape.avif 2559w" sizes="100vw" class="ui-background-image"/></div><div class="js-code w-embed w-script">
831<script>
832  document.addEventListener("DOMContentLoaded", function () {
833    if (typeof Swiper === "undefined") {
834      console.warn("[Swiper] Not found. Load swiper-bundle.min.js before this script.");
835      return;
836    }
837
838    document
839      .querySelectorAll("[data-swiper-slider-wf='media']")
840      .forEach(function (slider) {
841      var swiperElement = slider.querySelector(".swiper");
842      var nextElement   = slider.querySelector(".swiper-next");
843      var prevElement   = slider.querySelector(".swiper-prev");
844      if (!swiperElement) return;
845
846      var navigation =
847          nextElement && prevElement
848      ? { nextEl: nextElement, prevEl: prevElement, disabledClass: "is-disabled" }
849      : undefined;
850
851      // --- Init ---
852      var swiper = new Swiper(swiperElement, {
853        // Core
854        speed: 500,
855        loop: false,
856        rewind: false,
857        autoHeight: false,
858        centeredSlides: false,
859        followFinger: true,
860        freeMode: false,
861        slideToClickedSlide: false,
862        // Layout
863        slidesPerView: 1,
864        spaceBetween: 16,
865
866        // Controls
867        mousewheel: { forceToAxis: true },
868        keyboard: { enabled: true, onlyInViewport: true },
869        navigation: navigation,
870
871        // Breakpoints
872        breakpoints: {
873          480: { slidesPerView: 1.5, spaceBetween: 16 },
874          768: { slidesPerView: 2, spaceBetween: 16 },
875          992: { slidesPerView: 3.5, spaceBetween: 16 }
876        }
877      });
878    });
879  });
880</script>
880</div></section><section class="section_cta-style-1"><div class="cta-style-1_image-wrapper"><img width="1134" height="385" alt="Large group of diverse people posing together indoors at a gaming or technology event with slot machines and electronic displays in the background." src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68f2c1d6323f74d6ec5a430d_gib1vdn3fh43bguczzcw.avif" loading="lazy" class="cta-style-1_image"/></div><div class="padding-global"><div class="container-large"><div class="cta-style-1_component"><div class="max-width-large is-wider-50 align-center"><div class="text-style-tagline">WE GET IT. WE LOVE IT. WE GAME.</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">CHARACTERS WELCOME</h2><div class="spacer-xsmall"></div><p class="text-size-large">Everything we do is led by our love of gaming and <br/>challenging the status quo. 
</p><div class="spacer-medium"></div><div class="button-group is-center"><a data-opacity-element="card" data-wf--button--variant="is-light" href="https://jobs.jobvite.com/agscareer" target="_blank" class="button w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489 w-inline-block"><div class="button-text">JOIN OUR CREW</div><div data-opacity-element="overlay" class="button-overlay w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489"></div></a></div></div></div></div></div><div class="cta-style-1_overlay"></div></section></main><footer class="footer_component"><div class="padding-global"><div class="container-large"><div class="footer_content"><a href="/" aria-label="Go to home" aria-current="page" class="footer_logo-link w-nav-brand w--current"><img width="361" height="121" alt="Blank white image with no visible content or details" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894df8fcacf0bce086c842f_logo.png" loading="lazy" class="footer_logo"/></a><div class="w-layout-grid footer_list-wrapper"><div class="footer_link-column"><div class="footer_link-title">WHO WE ARE</div><div class="footer_link-list"><a href="/company/about-ags" class="footer_link">Mission &amp; History</a><a href="/company/leadership" class="footer_link">Leadership &amp; Culture</a><a href="/company/benefits-perks-offerings" class="footer_link">Benefits, Perks &amp; Programs</a><a href="https://newsroom.playags.com/" target="_blank" class="footer_link">Newsroom</a></div></div><div class="footer_link-column"><div class="footer_link-title">OPERATIONS and Contact</div><div class="footer_link-list"><a href="/operations-and-contact/locations" class="footer_link">Locations</a><a href="/operations-and-contact/get-in-touch" class="footer_link">Get in Touch</a><a href="/operations-and-contact/field-service-support" class="footer_link">Field Service Support</a><a href="https://jobs.jobvite.com/agscareer" class="footer_link">Open Positions</a></div></div><div class="footer_link-column"><div class="footer_link-title">COMPLIANCE</div><div class="footer_link-list"><a href="/compliance/license-information" class="footer_link">License Information</a><a href="/compliance/federal-health-care-price" class="footer_link">Federal Health Care Price</a><a href="/compliance/privacy-policy" class="footer_link">Privacy Policy</a><a href="/compliance/cookie-policy" class="footer_link">Cookie Policy</a><a href="/compliance/terms-and-conditions" class="footer_link">Terms and Conditions</a></div></div><div class="footer_link-column"><div class="footer_link-title">Follow us on social</div><div class="footer_link-list"><a href="https://www.linkedin.com/company/american-gaming-systems/" target="_blank" class="footer_link">LinkedIn</a><a href="https://www.facebook.com/AmericanGamingSystems" target="_blank" class="footer_link">Facebook</a><a href="https://www.youtube.com/user/AmericanGamingSys" target="_blank" class="footer_link">Youtube</a><a href="https://www.instagram.com/play_ags/" target="_blank" class="footer_link">Instagram</a><a href="https://www.tiktok.com/@playags/video/7473618273737772331" target="_blank" class="footer_link">Tiktok</a><a href="https://x.com/PlayAGS" target="_blank" class="footer_link">X</a></div></div></div></div></div></div><div class="footer_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894e16c5e2515a5485f2fd0_shape.svg" loading="lazy" width="569" height="658" alt="" class="footer_background-image"/></div><div class="w-embed w-script"><!-- Search Code Start Here -->
881
882<!-- 
883  Webflow Unified Search Widget
884  ==============================
885  This uses the same search logic as Next.js by calling the /api/search endpoint
886  
887  Instructions:
888  1. Copy this entire file content
889  2. Paste into a Webflow Embed element (in the <head> or before </body>)
890  3. API routing (see resolvePlayagsApiConfig in script):
891     - staging.playags.com or ags--staging.webflow.io → https://staging.playags.com/directory/api
892     - playags.com or ags-prod.webflow.io → https://www.playags.com/directory/api
893     - Vercel preview / localhost → same-origin /api
894  4. Make sure you have an element with id="header-search" to trigger the search
895  5. The search will work exactly like the Next.js version
896-->
897
898<link rel="stylesheet" href="https://use.typekit.net/aun5yhc.css" />
899<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" />
900
901<style>
902  /* ----- Base Fonts (matching Next.js) ----- */
903  .ts-modal-overlay,
904  .ts-modal-container,
905  .ts-search-header,
906  .ts-results-container {
907    font-family: 'stevie-sans', sans-serif;
908  }
909
910  /* ----- Modal shell ----- */
911  .ts-modal-overlay {
912    position: fixed;
913    inset: 0;
914    background: rgba(0, 0, 0, 0.5);
915    display: none;
916    align-items: flex-start;
917    justify-content: flex-end;
918    z-index: 99999;
919    opacity: 0;
920    transition: opacity 0.2s ease-in-out;
921  }
922
923  .ts-modal-overlay.open {
924    display: flex;
925    opacity: 1;
926  }
927
928  .ts-modal-container {
929    width: 100%;
930    max-width: 100%;
931    height: 100vh;
932    border-left: 1px solid #e5e7eb;
933    box-shadow: -4px 0 6px -1px rgba(0, 0, 0, 0.1);
934    overflow: hidden;
935    transform: translateX(100%);
936    transition: transform 0.3s ease-out;
937  }
938
939  .ts-modal-overlay.open .ts-modal-container {
940    transform: translateX(0);
941  }
942
943  /* Prevent background scroll when modal open */
944  body.ts-no-scroll {
945    overflow: hidden;
946  }
947
948  /* ----- Header with logo, search, cancel (12-column grid) ----- */
949  .ts-search-header {
950    display: grid;
951    grid-template-columns: repeat(12, 1fr);
952    gap: 8px 16px;
953    padding: 16px 44px;
954    align-items: center;
955    background: white;
956  }
957
958  @media (max-width: 640px) {
959    .ts-search-header {
960      gap: 8px;
961      padding: 16px;
962    }
963  }
964
965  .ts-logo-container {
966    display: none;
967  }
968
969  @media (min-width: 1080px) {
970    .ts-logo-container {
971      display: flex;
972      align-items: center;
973      grid-column: span 2;
974    }
975  }
976
977  .ts-logo {
978    height: 32px;
979    width: auto;
980  }
981
982  @media (min-width: 640px) {
983    .ts-logo {
984      height: 44px;
985    }
986  }
987
988  .ts-search-input-container {
989    grid-column: span 10;
990    display: flex;
991    align-items: center;
992    gap: 8px;
993    background: #f7f4f0;
994    border-radius: 8px;
995    padding: 8px 12px;
996    max-height: 40px;
997  }
998
999  @media (min-width: 1080px) {
1000    .ts-search-input-container {
1001      grid-column: span 8;
1002      padding: 10px 12px;
1003    }
1004  }
1005
1006  .ts-search-icon {
1007    width: 16px;
1008    height: 16px;
1009    color: #6b7280;
1010    flex-shrink: 0;
1011  }
1012
1013  @media (min-width: 640px) {
1014    .ts-search-icon {
1015      width: 18px;
1016      height: 18px;
1017    }
1018  }
1019
1020  .ts-search-input {
1021    flex: 1;
1022    height: 32px;
1023    background: #f7f4f0;
1024    border: 0;
1025    outline: 0;
1026    /* Must stay >= 16px: iOS Safari auto-zooms the page when a focused
1027       input has a smaller font, cropping the Cancel button (PAGS-129) */
1028    font-size: 16px;
1029    opacity: 0.55;
1030    color: #111827;
1031  }
1032
1033  @media (min-width: 640px) {
1034    .ts-search-input {
1035      height: 40px;
1036      font-size: 18px;
1037    }
1038  }
1039
1040  .ts-search-input::placeholder {
1041    color: #6b7280;
1042  }
1043
1044  .ts-cancel-button {
1045    grid-column: span 2;
1046    display: flex;
1047    justify-content: flex-end;
1048  }
1049
1050  @media (min-width: 1080px) {
1051    .ts-cancel-button {
1052      grid-column: span 2;
1053    }
1054  }
1055
1056  .ts-cancel-btn {
1057    padding: 4px 8px;
1058    font-size: 12px;
1059    font-weight: 500;
1060    background: transparent;
1061    border: 0;
1062    cursor: pointer;
1063    color: #111827;
1064    border-radius: 6px;
1065    transition: background-color 0.2s;
1066  }
1067
1068  @media (min-width: 640px) {
1069    .ts-cancel-btn {
1070      padding: 8px 16px;
1071      font-size: 14px;
1072    }
1073  }
1074
1075  .ts-cancel-btn:hover {
1076    background: rgba(0, 0, 0, 0.05);
1077  }
1078
1079  /* ----- Popular search terms row ----- */
1080  .ts-popular-row {
1081    display: grid;
1082    grid-template-columns: repeat(12, 1fr);
1083    gap: 8px 16px;
1084    padding: 0 44px 16px;
1085    background: #fff;
1086  }
1087
1088  @media (max-width: 640px) {
1089    .ts-popular-row {
1090      gap: 8px;
1091      padding: 0 16px 16px;
1092    }
1093  }
1094
1095  .ts-popular-container {
1096    grid-column: span 12 / span 12;
1097    grid-column-start: 1;
1098  }
1099
1100  @media (min-width: 1080px) {
1101    .ts-popular-container {
1102      grid-column: span 8 / span 8;
1103      grid-column-start: 3;
1104    }
1105  }
1106
1107  .ts-popular-title {
1108    font-size: 12px;
1109    font-weight: 500;
1110    color: #111827;
1111    margin-bottom: 8px;
1112  }
1113
1114  @media (min-width: 1080px) {
1115    .ts-popular-title {
1116      font-size: 14px;
1117      margin-bottom: 12px;
1118    }
1119  }
1120
1121  .ts-popular-terms {
1122    display: flex;
1123    flex-wrap: wrap;
1124    gap: 4px 8px;
1125  }
1126
1127  @media (min-width: 1080px) {
1128    .ts-popular-terms {
1129      gap: 8px;
1130    }
1131  }
1132
1133  .ts-popular-term {
1134    padding: 4px 8px;
1135    font-size: 12px;
1136    background: #f7f4f0;
1137    border: 0;
1138    border-radius: 2px;
1139    cursor: pointer;
1140    color: #374151;
1141    opacity: 0.55;
1142    transition: background-color 0.2s;
1143  }
1144
1145  @media (min-width: 1080px) {
1146    .ts-popular-term {
1147      padding: 6px 12px;
1148      font-size: 14px;
1149    }
1150  }
1151
1152  .ts-popular-term:hover,
1153  .ts-popular-term:focus {
1154    background: rgba(247, 244, 240, 0.8);
1155    outline: 2px solid #d1d5db;
1156    outline-offset: 0;
1157  }
1158
1159  /* ----- Results area ----- */
1160  .ts-results-container {
1161    max-height: 70vh;
1162    overflow-y: auto;
1163    background: white;
1164    padding: 16px 44px 24px;
1165    display: grid;
1166  }
1167
1168  @media (max-width: 640px) {
1169    .ts-results-container {
1170      padding: 16px;
1171    }
1172  }
1173
1174  .ts-loading,
1175  .ts-empty {
1176    display: flex;
1177    flex-direction: column;
1178    align-items: center;
1179    justify-content: center;
1180    padding: 40px 20px;
1181    text-align: center;
1182    color: #6b7280;
1183    font-size: 14px;
1184  }
1185
1186  .ts-loading-icon,
1187  .ts-empty-icon {
1188    font-size: 16px;
1189    margin-bottom: 8px;
1190    opacity: 0.5;
1191  }
1192
1193  .ts-spinner {
1194    animation: spin 1s linear infinite;
1195  }
1196
1197  @keyframes spin {
1198    from {
1199      transform: rotate(0deg);
1200    }
1201    to {
1202      transform: rotate(360deg);
1203    }
1204  }
1205
1206  .ts-error {
1207    padding: 20px;
1208    text-align: center;
1209    color: #dc2626;
1210    background: #fef2f2;
1211    border: 1px solid #fecaca;
1212    border-radius: 8px;
1213    font-size: 14px;
1214  }
1215
1216  /* ----- Result groups ----- */
1217  .ts-result-group {
1218    margin-bottom: 32px;
1219    justify-self: center;
1220  }
1221
1222  .ts-result-group:last-child {
1223    margin-bottom: 0;
1224  }
1225
1226  .ts-result-group-title {
1227    font-family: stevie-sans, sans-serif;
1228    font-size: 14px;
1229    font-weight: 600;
1230    color: #111827;
1231    margin-bottom: 16px;
1232  }
1233
1234  .ts-result-count {
1235    font-weight: 400;
1236    color: #6b7280;
1237    margin-left: 4px;
1238  }
1239
1240  .ts-table-category {
1241    margin-bottom: 24px;
1242  }
1243
1244  .ts-table-category:last-child {
1245    margin-bottom: 0;
1246  }
1247
1248  .ts-table-category-title {
1249    font-family: stevie-sans, sans-serif;
1250    font-size: 12px;
1251    font-weight: 600;
1252    color: #374151;
1253    margin-bottom: 12px;
1254  }
1255
1256  /* ----- Result grid ----- */
1257  .ts-results-grid {
1258    display: grid;
1259    grid-template-columns: repeat(1, 275px);
1260    gap: 18px;
1261  }
1262
1263  @media (min-width: 600px) {
1264    .ts-results-grid {
1265      grid-template-columns: repeat(2, 1fr);
1266    }
1267  }
1268
1269  @media (min-width: 768px) {
1270    .ts-results-grid {
1271      grid-template-columns: repeat(2, 275px);
1272    }
1273  }
1274
1275  @media (min-width: 1024px) {
1276    .ts-results-grid {
1277      grid-template-columns: repeat(3, 275px);
1278    }
1279  }
1280
1281  @media (min-width: 1280px) {
1282    .ts-results-grid {
1283      grid-template-columns: repeat(4, 275px);
1284    }
1285  }
1286
1287  /* ----- Result card (matching GameTile) ----- */
1288  .ts-result-card {
1289    width: 100%;
1290    height: 183px;
1291    background: white;
1292    border: 1px solid #e5e7eb;
1293    border-radius: 8px;
1294    overflow: hidden;
1295    cursor: pointer;
1296    transition: all 0.3s ease;
1297    position: relative;
1298  }
1299
1300  @media (min-width: 640px) {
1301    .ts-result-card {
1302      max-width: 275px;
1303    }
1304  }
1305
1306  .ts-result-card:hover {
1307    transform: scale(1.05);
1308    box-shadow:
1309      0 10px 15px -3px rgba(0, 0, 0, 0.1),
1310      0 4px 6px -2px rgba(0, 0, 0, 0.05);
1311  }
1312
1313  /* Card with image */
1314  .ts-card-image-container {
1315    max-width: 275px;
1316    max-height: 183px;
1317    position: relative;
1318    width: 100%;
1319    height: 100%;
1320    overflow: hidden;
1321  }
1322
1323  /* When card has a caption (information articles), reduce image container height */
1324  .ts-result-card:has(.ts-card-caption) .ts-card-image-container {
1325    height: calc(100% - 48px);
1326  }
1327
1328  .ts-card-image {
1329    width: 100%;
1330    height: 100%;
1331    object-fit: cover;
1332    transition: transform 0.3s ease;
1333  }
1334
1335  .ts-result-card:hover .ts-card-image {
1336    transform: scale(1.1);
1337  }
1338
1339  .ts-card-overlay {
1340    width: 100%;
1341    position: absolute;
1342    inset-x: 0;
1343    bottom: 0;
1344    background: linear-gradient(to top, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.8) 55%, transparent 100%);
1345    padding: 8px;
1346    transform: translateY(100%);
1347    transition: transform 0.3s ease-in-out;
1348  }
1349
1350  .ts-result-card:hover .ts-card-overlay {
1351    transform: translateY(0);
1352  }
1353
1354  .ts-card-title {
1355    font-family: 'termina', sans-serif;
1356    font-size: 14px;
1357    font-weight: 600;
1358    color: white;
1359    margin-bottom: 4px;
1360    line-height: 1.2;
1361  }
1362
1363  .ts-card-description {
1364    font-size: 12px;
1365    color: white;
1366    line-height: 1.4;
1367    opacity: 0.9;
1368  }
1369
1370  /* Card caption for information articles */
1371  .ts-card-caption {
1372    font-family: 'termina', sans-serif;
1373    padding: 12px;
1374    background: white;
1375    font-size: 14pt;
1376    line-height: 1.2;
1377    color: #111827;
1378    white-space: nowrap;
1379    overflow: hidden;
1380    text-overflow: ellipsis;
1381    height: 48px;
1382    display: flex;
1383    align-items: center;
1384  }
1385
1386  /* Card without image (information items) */
1387  .ts-card-info {
1388    width: 100%;
1389    height: 100%;
1390    background: black;
1391    display: flex;
1392    align-items: center;
1393    justify-content: center;
1394    padding: 16px;
1395  }
1396
1397  .ts-card-info-content {
1398    text-align: center;
1399  }
1400
1401  .ts-card-info-title {
1402    font-family: 'termina', sans-serif;
1403    font-size: 14px;
1404    font-weight: 600;
1405    color: white;
1406    margin-bottom: 8px;
1407  }
1408
1409  .ts-card-info-description {
1410    font-size: 12px;
1411    color: #d1d5db;
1412    line-height: 1.4;
1413  }
1414</style>
1415
1416<!-- Modal container (hidden by default) -->
1417<div id="ts-search-modal" class="ts-modal-overlay" role="dialog" aria-modal="true" aria-hidden="true">
1418  <div class="ts-modal-container" role="document">
1419    <!-- Header: Logo (2 cols) | Search (8 cols) | Cancel (2 cols) -->
1420    <div class="ts-search-header">
1421      <div class="ts-logo-container">
1422        <img src="https://www.playags.com/ags-logo.svg" alt="AGS" class="ts-logo" id="ts-logo" />
1423      </div>
1424
1425      <div class="ts-search-input-container">
1426        <i class="fas fa-search ts-search-icon"></i>
1427        <input type="text" id="search-input" class="ts-search-input" placeholder="Search games, cabinets, tables..." autocomplete="off" autofocus />
1428      </div>
1429
1430      <div class="ts-cancel-button">
1431        <button type="button" class="ts-cancel-btn" id="ts-modal-close" aria-label="Close search">Cancel</button>
1432      </div>
1433    </div>
1434
1435    <!-- Popular search terms row (aligned with search input) -->
1436    <div class="ts-popular-row" id="ts-popular-row" style="display: none">
1437      <div class="ts-popular-container">
1438        <p class="ts-popular-title">Popular search terms</p>
1439        <div class="ts-popular-terms" id="ts-popular-terms"></div>
1440      </div>
1441    </div>
1442
1443    <!-- Results container -->
1444    <div id="search-results" class="ts-results-container">
1445      <div class="ts-empty">
1446        <i class="fas fa-search ts-empty-icon"></i>
1447        <p>Start typing to search across all content</p>
1448      </div>
1449    </div>
1450  </div>
1451</div>
1452
1453<script>
1454  (function () {
1455    'use strict';
1456
1457    // ============================================
1458    // CONFIGURATION
1459    // ============================================
1460    function resolvePlayagsApiConfig() {
1461      const host = window.location.hostname;
1462
1463      if (host.includes('staging.playags.com') || host.includes('ags--staging.webflow.io') || host.includes('ags-dev.webflow.io')) {
1464        return {
1465          siteOrigin: 'https://staging.playags.com',
1466          apiBase: 'https://staging.playags.com/directory/api',
1467          basePath: '/directory',
1468        };
1469      }
1470
1471      if (host.includes('playags.com') || host.includes('ags-prod.webflow.io')) {
1472        return {
1473          siteOrigin: 'https://www.playags.com',
1474          apiBase: 'https://www.playags.com/directory/api',
1475          basePath: '/directory',
1476        };
1477      }
1478
1479      return {
1480        siteOrigin: window.location.origin,
1481        apiBase: `${window.location.origin}/api`,
1482        basePath: '',
1483      };
1484    }
1485
1486    const { siteOrigin: SITE_ORIGIN, apiBase: API_BASE, basePath: BASE_PATH } = resolvePlayagsApiConfig();
1487    const API_URL = `${API_BASE}/search`;
1488
1489    // ============================================
1490    // HELPER FUNCTIONS (minimal logic)
1491    // ============================================
1492
1493    // Get type label - fallback if API doesn't provide it
1494    function getTypeLabel(type, typeLabels) {
1495      if (typeLabels && typeLabels[type]) {
1496        return typeLabels[type];
1497      }
1498
1499      // Simple fallback (shouldn't be needed if API works correctly)
1500      const labels = {
1501        game: 'Games',
1502        cabinet: 'Cabinets',
1503        table: 'Tables',
1504        signature_collection: 'Collections',
1505        information: 'More information',
1506      };
1507
1508      return labels[type] || 'Content';
1509    }
1510
1511    // ============================================
1512    // SEARCH FUNCTIONALITY
1513    // ============================================
1514
1515    function addBasePath(path) {
1516      if (!path) return path;
1517      if (path.startsWith('http://') || path.startsWith('https://')) {
1518        return path;
1519      }
1520      // If path already starts with base path, don't add it again
1521      if (BASE_PATH && path.startsWith(BASE_PATH)) {
1522        return path;
1523      }
1524      return `${BASE_PATH}${path}`;
1525    }
1526
1527    function escapeHtml(text) {
1528      const div = document.createElement('div');
1529      div.textContent = text;
1530      return div.innerHTML;
1531    }
1532
1533    // Fetch OpenGraph image from API
1534    async function fetchOpenGraphImage(url) {
1535      if (!url) return null;
1536
1537      try {
1538        // Convert relative URLs to absolute
1539        let absoluteUrl = url;
1540        if (!url.startsWith('http://') && !url.startsWith('https://')) {
1541          if (url.startsWith('/')) {
1542            absoluteUrl = `${SITE_ORIGIN}${url}`;
1543          } else {
1544            absoluteUrl = `${SITE_ORIGIN}/${url}`;
1545          }
1546        }
1547
1548        // Use the opengraph API endpoint (same base as search API)
1549        const response = await fetch(`${API_BASE}/opengraph?url=${encodeURIComponent(absoluteUrl)}`);
1550
1551        if (!response.ok) {
1552          return null;
1553        }
1554
1555        const data = await response.json();
1556        return data.image || null;
1557      } catch (error) {
1558        console.error('Error fetching OpenGraph image:', error);
1559        return null;
1560      }
1561    }
1562
1563    let searchTimeout = null;
1564
1565    async function performSearch(query) {
1566      const resultsContainer = document.getElementById('search-results');
1567      const popularRow = document.getElementById('ts-popular-row');
1568
1569      if (!query.trim()) {
1570        if (resultsContainer) {
1571          resultsContainer.innerHTML = `
1572          <div class="ts-empty">
1573            <i class="fas fa-search ts-empty-icon"></i>
1574            <p>Start typing to search across all content</p>
1575          </div>
1576        `;
1577        }
1578        if (popularRow) popularRow.style.display = 'grid';
1579        return;
1580      }
1581
1582      // Hide popular search terms when showing results
1583      if (popularRow) popularRow.style.display = 'none';
1584
1585      if (resultsContainer) {
1586        resultsContainer.innerHTML = '<div class="ts-loading"><i class="fas fa-spinner ts-spinner ts-loading-icon"></i>Searching...</div>';
1587      }
1588
1589      try {
1590        const response = await fetch(`${API_URL}?q=${encodeURIComponent(query.trim())}&limit=30`);
1591
1592        if (!response.ok) {
1593          throw new Error(`HTTP error! status: ${response.status}`);
1594        }
1595
1596        // API returns all processed data - just use it directly
1597        const data = await response.json();
1598
1599        await renderResults(data, query);
1600      } catch (error) {
1601        console.error('Search error:', error);
1602        if (resultsContainer) {
1603          resultsContainer.innerHTML = `
1604          <div class="ts-error">
1605            <i class="fas fa-exclamation-triangle"></i>
1606            Error searching. Please try again.
1607          </div>
1608        `;
1609        }
1610      }
1611    }
1612
1613    async function renderResults(data, query) {
1614      const resultsContainer = document.getElementById('search-results');
1615      if (!resultsContainer) return;
1616
1617      // Use data directly from API - no processing needed
1618      const { grouped, tableCategories, otherTypes, tablesShouldComeBeforeGames, typeLabels } = data;
1619
1620      if (!grouped || Object.keys(grouped).length === 0) {
1621        resultsContainer.innerHTML = `
1622        <div class="ts-empty">
1623          <i class="fas fa-search ts-empty-icon"></i>
1624          <p>No results found for "${escapeHtml(query)}"</p>
1625        </div>
1626      `;
1627        return;
1628      }
1629
1630      let html = '';
1631
1632      // More information ALWAYS first (from API order)
1633      if (grouped['information'] && grouped['information'].length > 0) {
1634        html += await renderTypeSection('information', grouped['information'], typeLabels || {});
1635      }
1636
1637      // Show tables first if API says so
1638      if (tablesShouldComeBeforeGames && tableCategories && tableCategories.length > 0) {
1639        html += renderTableCategories(tableCategories, grouped, typeLabels || {});
1640      }
1641
1642      // Other types (games, cabinets, etc.) - exclude information (from API order)
1643      if (otherTypes) {
1644        for (const type of otherTypes.filter((t) => t !== 'information')) {
1645          html += await renderTypeSection(type, grouped[type], typeLabels || {});
1646        }
1647      }
1648
1649      // Tables section - show after games if API says so
1650      if (!tablesShouldComeBeforeGames && tableCategories && tableCategories.length > 0) {
1651        html += renderTableCategories(tableCategories, grouped, typeLabels || {});
1652      }
1653
1654      resultsContainer.innerHTML = html;
1655    }
1656
1657    async function renderTypeSection(type, results, typeLabels) {
1658      if (!results || results.length === 0) return '';
1659
1660      // Use type label from API, fallback to helper function
1661      const typeLabel = getTypeLabel(type, typeLabels);
1662      const isInformation = type === 'information';
1663
1664      // For information articles, fetch OpenGraph images for those without images
1665      if (isInformation) {
1666        for (const result of results) {
1667          if (!result.image && result.url) {
1668            // Fetch OpenGraph image asynchronously
1669            const ogImage = await fetchOpenGraphImage(result.url);
1670            if (ogImage) {
1671              result.image = ogImage;
1672            }
1673          }
1674        }
1675      }
1676
1677      const itemsHtml = results
1678        .map((result) => {
1679          const finalUrl = addBasePath(result.url);
1680          const isInfoItem = isInformation && !result.image;
1681
1682          if (isInfoItem) {
1683            return `
1684          <div class="ts-result-card" onclick="window.location.href='${finalUrl}'">
1685            <div class="ts-card-info">
1686              <div class="ts-card-info-content">
1687                <div class="ts-card-info-title">${escapeHtml(result.title)}</div>
1688                ${result.description ? `<div class="ts-card-info-description">${escapeHtml(result.description.length > 50 ? result.description.substring(0, 50) + '...' : result.description)}</div>` : ''}
1689              </div>
1690            </div>
1691          </div>
1692        `;
1693          }
1694
1695          // Information with image (OpenGraph thumbnail)
1696          if (isInformation && result.image) {
1697            const escapedTitle = escapeHtml(result.title);
1698            return `
1699          <div class="ts-result-card" onclick="window.location.href='${finalUrl}'">
1700            <div class="ts-card-image-container">
1701              <img src="${escapeHtml(result.image)}" alt="${escapedTitle}" class="ts-card-image" onerror="this.onerror=null; this.style.display='none'; const card=this.closest('.ts-result-card'); if(card){const caption=card.querySelector('.ts-card-caption'); if(card && !card.querySelector('.ts-card-info')){card.innerHTML='<div class=\\'ts-card-info\\'><div class=\\'ts-card-info-content\\'><div class=\\'ts-card-info-title\\'>${escapedTitle}</div></div></div>';}}">
1702            </div>
1703            <div class="ts-card-caption">${escapedTitle}</div>
1704          </div>
1705        `;
1706          }
1707
1708          // Regular card with image
1709          return `
1710        <div class="ts-result-card" onclick="window.location.href='${finalUrl}'">
1711          <div class="ts-card-image-container">
1712            ${result.image ? `<img src="${escapeHtml(result.image)}" alt="${escapeHtml(result.title)}" class="ts-card-image">` : ''}
1713            <div class="ts-card-overlay">
1714              <div class="ts-card-title">${escapeHtml(result.title)}</div>
1715              ${result.description && result.type !== 'signature_collection' ? `<div class="ts-card-description">${escapeHtml(result.description.length > 50 ? result.description.substring(0, 50) + '...' : result.description)}</div>` : ''}
1716            </div>
1717          </div>
1718        </div>
1719      `;
1720        })
1721        .join('');
1722
1723      return `
1724      <div class="ts-result-group">
1725        <h3 class="ts-result-group-title">${typeLabel} <span class="ts-result-count">(${results.length})</span></h3>
1726        <div class="ts-results-grid">
1727          ${itemsHtml}
1728        </div>
1729      </div>
1730    `;
1731    }
1732
1733    function renderTableCategories(tableCategories, grouped, typeLabels) {
1734      if (!tableCategories || tableCategories.length === 0) return '';
1735
1736      const totalTableCount = tableCategories.reduce((sum, key) => sum + (grouped[key]?.length || 0), 0);
1737
1738      let html = `
1739      <div class="ts-result-group">
1740        <h3 class="ts-result-group-title">Tables <span class="ts-result-count">(${totalTableCount})</span></h3>
1741    `;
1742
1743      tableCategories.forEach((category) => {
1744        const results = grouped[category] || [];
1745        if (results.length === 0) return;
1746
1747        // Use type label from API, fallback to helper function
1748        const categoryLabel = getTypeLabel(category, typeLabels);
1749
1750        const itemsHtml = results
1751          .map((result) => {
1752            const finalUrl = addBasePath(result.url);
1753            return `
1754          <div class="ts-result-card" onclick="window.location.href='${finalUrl}'">
1755            <div class="ts-card-image-container">
1756              ${result.image ? `<img src="${escapeHtml(result.image)}" alt="${escapeHtml(result.title)}" class="ts-card-image">` : ''}
1757              <div class="ts-card-overlay">
1758                <div class="ts-card-title">${escapeHtml(result.title)}</div>
1759                ${result.description ? `<div class="ts-card-description">${escapeHtml(result.description.length > 50 ? result.description.substring(0, 50) + '...' : result.description)}</div>` : ''}
1760              </div>
1761            </div>
1762          </div>
1763        `;
1764          })
1765          .join('');
1766
1767        html += `
1768        <div class="ts-table-category">
1769          <h4 class="ts-table-category-title">${categoryLabel} <span class="ts-result-count">(${results.length})</span></h4>
1770          <div class="ts-results-grid">
1771            ${itemsHtml}
1772          </div>
1773        </div>
1774      `;
1775      });
1776
1777      html += '</div>';
1778      return html;
1779    }
1780
1781    // ============================================
1782    // MODAL MANAGEMENT
1783    // ============================================
1784
1785    const modal = document.getElementById('ts-search-modal');
1786    const closeBtn = document.getElementById('ts-modal-close');
1787    const searchInput = document.getElementById('search-input');
1788    let lastActiveElement = null;
1789    let hasSearched = false;
1790
1791    function openModal() {
1792      lastActiveElement = document.activeElement;
1793      modal.classList.add('open');
1794      modal.setAttribute('aria-hidden', 'false');
1795      document.body.classList.add('ts-no-scroll');
1796
1797      // Reset state
1798      hasSearched = false;
1799      const results = document.getElementById('search-results');
1800      const popularRow = document.getElementById('ts-popular-row');
1801
1802      if (searchInput) searchInput.value = '';
1803
1804      if (results) {
1805        results.innerHTML = `
1806        <div class="ts-empty">
1807          <i class="fas fa-search ts-empty-icon"></i>
1808          <p>Start typing to search across all content</p>
1809        </div>
1810      `;
1811      }
1812
1813      // Show popular search terms
1814      if (popularRow) {
1815        popularRow.style.display = 'grid';
1816        loadPopularSearchTerms();
1817      }
1818
1819      setTimeout(() => {
1820        if (searchInput) searchInput.focus();
1821      }, 100);
1822    }
1823
1824    function closeModal() {
1825      modal.classList.remove('open');
1826      modal.setAttribute('aria-hidden', 'true');
1827      document.body.classList.remove('ts-no-scroll');
1828
1829      // Hide popular search terms
1830      const popularRow = document.getElementById('ts-popular-row');
1831      if (popularRow) popularRow.style.display = 'none';
1832
1833      if (lastActiveElement && lastActiveElement.focus) {
1834        setTimeout(() => lastActiveElement.focus(), 0);
1835      }
1836    }
1837
1838    // Close on overlay click
1839    modal.addEventListener('click', (e) => {
1840      if (e.target === modal) closeModal();
1841    });
1842
1843    // Close on ESC
1844    document.addEventListener('keydown', (e) => {
1845      if (e.key === 'Escape' && modal.classList.contains('open')) {
1846        e.preventDefault();
1847        closeModal();
1848      }
1849    });
1850
1851    if (closeBtn) closeBtn.addEventListener('click', closeModal);
1852
1853    // Search input debouncing
1854    if (searchInput) {
1855      searchInput.addEventListener('input', (e) => {
1856        const query = e.target.value;
1857
1858        // Clear existing timeout
1859        if (searchTimeout) {
1860          clearTimeout(searchTimeout);
1861        }
1862
1863        // Debounce search
1864        searchTimeout = setTimeout(() => {
1865          hasSearched = true;
1866          performSearch(query);
1867        }, 300);
1868      });
1869    }
1870
1871    // ============================================
1872    // POPULAR SEARCH TERMS
1873    // ============================================
1874
1875    async function loadPopularSearchTerms() {
1876      try {
1877        const response = await fetch(`${API_BASE}/popular-search-terms`);
1878
1879        if (!response.ok) {
1880          return;
1881        }
1882
1883        const terms = await response.json();
1884
1885        const container = document.getElementById('ts-popular-terms');
1886        if (!container) return;
1887
1888        if (!terms || terms.length === 0) {
1889          container.innerHTML = '';
1890          return;
1891        }
1892
1893        container.innerHTML = terms
1894          .map((term) => {
1895            const searchQuery = term.link || term.title || '';
1896            const displayTitle = term.title || '';
1897            const escapedQuery = searchQuery.replace(/'/g, "\\'").replace(/"/g, '&quot;');
1898            const escapedTitle = displayTitle.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#39;').replace(/"/g, '&quot;');
1899
1900            return `
1901          <button 
1902            class="ts-popular-term" 
1903            onclick="handlePopularSearch('${escapedQuery}')"
1904          >
1905            ${escapedTitle}
1906          </button>
1907        `;
1908          })
1909          .join('');
1910      } catch (error) {
1911        console.error('Error loading popular search terms:', error);
1912        const container = document.getElementById('ts-popular-terms');
1913        if (container) {
1914          container.innerHTML = '';
1915        }
1916      }
1917    }
1918
1919    window.handlePopularSearch = function (linkOrQuery) {
1920      if (linkOrQuery.startsWith('http')) {
1921        window.location.href = linkOrQuery;
1922      } else if (searchInput) {
1923        searchInput.value = linkOrQuery;
1924        hasSearched = true;
1925        performSearch(linkOrQuery);
1926      }
1927    };
1928
1929    // ============================================
1930    // TRIGGER ATTACHMENT
1931    // ============================================
1932
1933    function attachTrigger() {
1934      const trigger = document.getElementById('header-search');
1935      if (trigger) {
1936        trigger.addEventListener('click', (e) => {
1937          e.preventDefault();
1938          openModal();
1939        });
1940      }
1941    }
1942
1943    // Keyboard shortcut (Cmd/Ctrl + K)
1944    document.addEventListener('keydown', (e) => {
1945      if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
1946        e.preventDefault();
1947        if (modal.classList.contains('open')) {
1948          closeModal();
1949        } else {
1950          openModal();
1951        }
1952      }
1953    });
1954
1955    // ============================================
1956    // INITIALIZATION
1957    // ============================================
1958
1959    if (document.readyState === 'loading') {
1960      document.addEventListener('DOMContentLoaded', attachTrigger);
1961    } else {
1962      attachTrigger();
1963    }
1964
1965    console.log('✅ Unified search initialized');
1966  })();
1967</script>
1967
1968
1969<!-- Search Code Finish Here -->
1970
1971<!-- Latest games Code Start Here -->
1972
1973<!-- Webflow New Games Update Widget -->
1974<!-- Embed this code in Webflow's custom code section (before </body> tag) -->
1975<script>
1976  (function () {
1977    'use strict';
1978
1979    // Number of games to fetch
1980    const NUM_GAMES = 6;
1981
1982    function resolvePlayagsApiConfig() {
1983      const host = window.location.hostname;
1984
1985      if (host.includes('staging.playags.com') || host.includes('ags--staging.webflow.io') || host.includes('ags-dev.webflow.io')) {
1986        return {
1987          apiBase: 'https://staging.playags.com/directory/api',
1988          basePath: '/directory',
1989        };
1990      }
1991
1992      if (host.includes('playags.com') || host.includes('ags-prod.webflow.io')) {
1993        return {
1994          apiBase: 'https://www.playags.com/directory/api',
1995          basePath: '/directory',
1996        };
1997      }
1998
1999      return {
2000        apiBase: `${window.location.origin}/api`,
2001        basePath: '',
2002      };
2003    }
2004
2005    const { apiBase: API_BASE, basePath: BASE_PATH } = resolvePlayagsApiConfig();
2006    const NEW_GAMES_API_URL = `${API_BASE}/new-games`;
2007
2008    /**
2009     * Add base path to URL
2010     */
2011    function addBasePath(path) {
2012      if (!path) return path;
2013      if (path.startsWith('http://') || path.startsWith('https://')) {
2014        return path;
2015      }
2016      return `${BASE_PATH}${path}`;
2017    }
2018
2019    /**
2020     * Fetch latest games from backend API
2021     */
2022    async function fetchLatestGames() {
2023      try {
2024        const response = await fetch(`${NEW_GAMES_API_URL}?limit=${NUM_GAMES}`);
2025        if (!response.ok) {
2026          return [];
2027        }
2028
2029        const data = await response.json();
2030        return Array.isArray(data?.games) ? data.games : [];
2031      } catch (error) {
2032        console.error('[New Games] Error fetching latest games from API:', error);
2033        return [];
2034      }
2035    }
2036
2037    /**
2038     * Update a single game slide
2039     */
2040    function updateGameSlide(slideElement, game, index) {
2041      const linkElement = slideElement.querySelector('a.new-games_image-wrapper');
2042      const imageElement = slideElement.querySelector('img.new-games_image');
2043
2044      if (!linkElement || !imageElement) {
2045        return false;
2046      }
2047
2048      // Update link
2049      const gameUrl = addBasePath(game.path);
2050      linkElement.href = gameUrl;
2051      linkElement.setAttribute('aria-label', `Game ${index + 1}: ${game.title}`);
2052
2053      // Update image
2054      if (game.image) {
2055        // Update src
2056        imageElement.src = game.image;
2057
2058        // Update srcset if it exists
2059        const srcset = imageElement.getAttribute('srcset');
2060        if (srcset) {
2061          // Try to generate responsive srcset from the image URL
2062          // This is a simple approach - you may need to adjust based on your CDN
2063          const baseUrl = game.image.split('?')[0]; // Remove query params
2064          const extension = baseUrl.split('.').pop();
2065          const baseName = baseUrl.replace(`.${extension}`, '');
2066
2067          // Generate srcset for common sizes
2068          const srcsetParts = [`${baseName}-p-500.${extension} 500w`, `${baseName}.${extension} 640w`];
2069          imageElement.setAttribute('srcset', srcsetParts.join(', '));
2070        }
2071
2072        // Update alt text
2073        imageElement.alt = game.title || '';
2074
2075        // Update sizes if needed
2076        if (!imageElement.getAttribute('sizes')) {
2077          imageElement.setAttribute('sizes', '100vw');
2078        }
2079      }
2080
2081      return true;
2082    }
2083
2084    /**
2085     * Wait for element to appear in DOM
2086     */
2087    function waitForElement(selector, timeout = 10000) {
2088      return new Promise((resolve, reject) => {
2089        const element = document.querySelector(selector);
2090        if (element) {
2091          resolve(element);
2092          return;
2093        }
2094
2095        const observer = new MutationObserver((mutations, obs) => {
2096          const element = document.querySelector(selector);
2097          if (element) {
2098            obs.disconnect();
2099            resolve(element);
2100          }
2101        });
2102
2103        observer.observe(document.body, {
2104          childList: true,
2105          subtree: true,
2106        });
2107
2108        setTimeout(() => {
2109          observer.disconnect();
2110          reject(new Error(`Element ${selector} not found within ${timeout}ms`));
2111        }, timeout);
2112      });
2113    }
2114
2115    /**
2116     * Hide slides initially until we load data from Typesense
2117     */
2118    function hideSlidesInitially() {
2119      const sliderWrapper = document.querySelector('.new-games_slider-wrapper');
2120      if (sliderWrapper) {
2121        sliderWrapper.style.opacity = '0';
2122        sliderWrapper.style.visibility = 'hidden';
2123      }
2124    }
2125
2126    /**
2127     * Show slides after data is loaded
2128     */
2129    function showSlides() {
2130      const sliderWrapper = document.querySelector('.new-games_slider-wrapper');
2131      if (sliderWrapper) {
2132        sliderWrapper.style.opacity = '1';
2133        sliderWrapper.style.visibility = 'visible';
2134        sliderWrapper.style.transition = 'opacity 0.3s ease-in-out';
2135      }
2136    }
2137
2138    /**
2139     * Show slides even if update failed (fallback to original content)
2140     */
2141    function showSlidesFallback() {
2142      const sliderWrapper = document.querySelector('.new-games_slider-wrapper');
2143      if (sliderWrapper) {
2144        sliderWrapper.style.opacity = '1';
2145        sliderWrapper.style.visibility = 'visible';
2146      }
2147    }
2148
2149    /**
2150     * Update navigation bar dropdown with latest games
2151     */
2152    function updateNavBarDropdown(games) {
2153      const navBar = document.querySelector('#new-games-nav-bar');
2154      if (!navBar) {
2155        return;
2156      }
2157
2158      const items = navBar.querySelectorAll('.w-dyn-item');
2159
2160      if (items.length === 0) {
2161        return;
2162      }
2163
2164      // Update each nav item with a game
2165      items.forEach((item, index) => {
2166        if (index < games.length) {
2167          const link = item.querySelector('a.navbar_dropdown-link');
2168          const textDiv = link?.querySelector('div');
2169
2170          if (link && textDiv) {
2171            // Update link href
2172            link.href = addBasePath(games[index].path);
2173
2174            // Update text content
2175            textDiv.textContent = games[index].title;
2176          }
2177        }
2178      });
2179    }
2180
2181    /**
2182     * Update all game slides
2183     */
2184    async function updateGameSlides(games) {
2185      let sliderWrapper;
2186      try {
2187        sliderWrapper = await waitForElement('.new-games_slider-wrapper', 10000);
2188      } catch (error) {
2189        console.error('[New Games] New games slider wrapper not found');
2190        showSlidesFallback();
2191        return;
2192      }
2193
2194      const slides = sliderWrapper.querySelectorAll('.swiper-slide.is-new-games');
2195
2196      if (slides.length === 0) {
2197        showSlidesFallback();
2198        return;
2199      }
2200
2201      // Update each slide with a game
2202      slides.forEach((slide, index) => {
2203        if (index < games.length) {
2204          updateGameSlide(slide, games[index], index);
2205        }
2206      });
2207
2208      // If we have a Swiper instance, reinitialize it
2209      if (typeof Swiper !== 'undefined' && sliderWrapper.swiper) {
2210        try {
2211          sliderWrapper.swiper.update();
2212          sliderWrapper.swiper.updateSlides();
2213          sliderWrapper.swiper.updateSlidesClasses();
2214        } catch (error) {
2215          console.warn('[New Games] Could not update Swiper instance:', error);
2216        }
2217      }
2218
2219      // Show slides after updates are complete
2220      showSlides();
2221    }
2222
2223    /**
2224     * Main function to update new games
2225     */
2226    async function updateNewGames() {
2227      const games = await fetchLatestGames();
2228
2229      if (games.length === 0) {
2230        showSlidesFallback();
2231        return;
2232      }
2233
2234      // Update navigation bar dropdown
2235      updateNavBarDropdown(games);
2236
2237      // Update slides (will wait for element if needed)
2238      try {
2239        await updateGameSlides(games);
2240      } catch (error) {
2241        console.error('[New Games] Error updating slides:', error);
2242        showSlidesFallback();
2243      }
2244    }
2245
2246    // Run the update
2247    // Wait for DOM to be ready
2248    function init() {
2249      // Wait a bit for Webflow's scripts to initialize
2250      if (document.readyState === 'loading') {
2251        document.addEventListener('DOMContentLoaded', () => {
2252          setTimeout(updateNewGames, 1000); // Give Webflow time to initialize
2253        });
2254      } else {
2255        setTimeout(updateNewGames, 1000);
2256      }
2257    }
2258
2259    // Hide slides immediately when script loads
2260    if (document.readyState === 'loading') {
2261      document.addEventListener('DOMContentLoaded', () => {
2262        hideSlidesInitially();
2263      });
2264    } else {
2265      hideSlidesInitially();
2266    }
2267
2268    // Start initialization
2269    init();
2270  })();
2271</script>
2271
2272
2273<!-- Latest games Code Finish Here --></div></footer></div>
2273<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=6893c2c851dca9d751167409" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.schunk.36b8fb49256177c8.js" type="text/javascript" integrity="sha384-4abIlA5/v7XaW1HMXKBgnUuhnjBYJ/Z9C1OSg4OhmVw9O3QeHJ/qJqFBERCDPv7G" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.schunk.da2b902111ca5f94.js" type="text/javascript" integrity="sha384-lzZWhl8oDVFR4Gxx1JYRT2y4m6dQQSM/9WeaLPmfUaYQyvd2RDVwC381Mssakm8W" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.schunk.d41edee7ca7cf92a.js" type="text/javascript" integrity="sha384-8PWkBPqpZlQlZ4GOpZq0J1fqkSAoCAfgzoP6bMFSv/35Xm6FByJsogkMKeIJOlal" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.schunk.121b0d7ff03e0f4a.js" type="text/javascript" integrity="sha384-xmxYNW5cjPqRkOstIN2AtIcrlQOgIF4k5PmI7WPxkrTXkUGtbSKaezRTaxUTpIEs" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.72681053.461c4572ef814cb9.js" type="text/javascript" integrity="sha384-AsXQendwxpmbDRSu8dFxGGSD5i29+mkQ2iztcuGeu0fPPwf8bC2xcOz1DadZm4oH" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/gsap/3.15.0/gsap.min.js" type="text/javascript"></script>
2273<script src="https://cdn.prod.website-files.com/gsap/3.15.0/ScrollTrigger.min.js" type="text/javascript"></script>
2273<script src="https://cdn.prod.website-files.com/gsap/3.15.0/SplitText.min.js" type="text/javascript"></script>
2273<script src="https://cdn.prod.website-files.com/gsap/3.15.0/TextPlugin.min.js" type="text/javascript"></script>
2273<script type="text/javascript">gsap.registerPlugin(ScrollTrigger,SplitText,TextPlugin);</script>
2273<!-- OPTIMIZED WEBFLOW FOOTER - ALL FEATURES WORKING + PERFORMANCE IMPROVEMENTS -->
2274<!-- Copy this ENTIRE block to Webflow → Project Settings → Custom Code → Footer Code (before </body>) -->
2275
2276<style>
2277  a[href*="webflow.com"][href*="badge"] { display: none !important; }
2278  .w-webflow-badge { display: none !important; }
2279</style>
2280
2281<!-- Load libraries with defer for non-blocking (except Highcharts which is needed immediately) -->
2282<script defer src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
vendor: 1 bytes, line 2282
2282
2283<script defer src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide-extension-auto-scroll.min.js"></script>
vendor: 1 bytes, line 2283
2283
2284<script defer src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
vendor: 1 bytes, line 2284
2284
2285<script defer src="https://cdn.jsdelivr.net/npm/@finsweet/attributes-accordion@1/accordion.js"></script>
vendor: 1 bytes, line 2285
2285
2286<script defer src="https://unpkg.com/@rive-app/[email protected]"></script>
2286
2287
2288<!-- Highcharts - Load immediately (map needs this) -->
2289<script src="https://code.highcharts.com/maps/highmaps.js"></script>
vendor: 1 bytes, line 2289
2289
2290<script src="https://code.highcharts.com/maps/modules/data.js"></script>
vendor: 1 bytes, line 2290
2290
2291<script src="https://code.highcharts.com/maps/modules/accessibility.js"></script>
2291
2292
2293<!-- CRITICAL: Super aggressive Elfsight lazy load -->
2294<script>
2295(function() {
2296  let elfsightLoaded = false;
2297  
2298  function loadElfsight() {
2299    if (elfsightLoaded) return;
2300    elfsightLoaded = true;
2301    
2302    console.log('⏰ Loading Elfsight widget...');
2303    
2304    var elfsightScript = document.createElement('script');
2305    elfsightScript.src = 'https://static.elfsight.com/platform/platform.js';
2306    elfsightScript.async = true;
2307    elfsightScript.setAttribute('data-use-service-core', '');
2308    
2309    elfsightScript.onload = function() {
2310      console.log('✅ Elfsight loaded');
2311    };
2312    
2313    document.body.appendChild(elfsightScript);
2314  }
2315  
2316  // Load on scroll (after user starts scrolling)
2317  let scrollTimer;
2318  let hasScrolled = false;
2319  
2320  window.addEventListener('scroll', function() {
2321    if (!hasScrolled) {
2322      hasScrolled = true;
2323      clearTimeout(scrollTimer);
2324      scrollTimer = setTimeout(loadElfsight, 2000);
2325    }
2326  }, { passive: true });
2327  
2328  // Load on any user interaction
2329  const interactions = ['click', 'touchstart', 'keydown'];
2330  interactions.forEach(function(event) {
2331    document.addEventListener(event, function() {
2332      setTimeout(loadElfsight, 1000);
2333    }, { once: true, passive: true });
2334  });
2335  
2336  // Fallback - load after 8 seconds if no interaction
2337  window.addEventListener('load', function() {
2338    setTimeout(function() {
2339      if (!elfsightLoaded) {
2340        console.log('⏰ Loading Elfsight (fallback timer)');
2341        loadElfsight();
2342      }
2343    }, 8000);
2344  });
2345})();
2346</script>
vendor: 69 bytes, lines 2346-2348
2346
2347
2348<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
2348GTM-WG7CSMRW
vendor: 84 bytes, lines 2348-2349
2348" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
2349
2350<script>
2351// ============================================
2352// SEARCH FUNCTIONALITY
2353// ============================================
2354document.addEventListener("DOMContentLoaded", () => {
2355  const form = document.querySelector('[data-search-canvas="form"]');
2356  const input = document.querySelector('[data-search-canvas="input"]');
2357  const button = document.querySelector('[data-search-canvas="button"]');
2358
2359  if (!form || !input || !button) return;
2360
2361  form.addEventListener("submit", (e) => {
2362    e.preventDefault();
2363    const value = input.value.trim();
2364    if (value) {
2365      window.open(`/directory/?search=${encodeURIComponent(value)}`, "_blank");
2366    }
2367  });
2368
2369  button.addEventListener("click", (e) => {
2370    e.preventDefault();
2371    const value = input.value.trim();
2372    if (value) {
2373      window.open(`/directory/?search=${encodeURIComponent(value)}`, "_blank");
2374    }
2375  });
2376
2377  input.addEventListener("input", () => {
2378    if (input.value.trim() !== "") {
2379      button.classList.add("is-active");
2380    } else {
2381      button.classList.remove("is-active");
2382    }
2383  });
2384});
2385
2386// ============================================
2387// GSAP OPACITY REVEAL
2388// ============================================
2389window.addEventListener("load", function () {
2390  if (typeof gsap !== 'undefined') {
2391    gsap.set("[data-hide-load]", { opacity: 1 });
2392  }
2393});
2394</script>
2394
2395
2396<noscript><style>[data-hide-load]{opacity: 1;}</style></noscript>
2397
2398<script>
2399// ============================================
2400// UNIVERSAL SWIPER SLIDER
2401// ============================================
2402(function UniversalSwiperSlider() {
2403  document.addEventListener("DOMContentLoaded", function () {
2404    if (typeof Swiper === "undefined") {
2405      console.warn("[UniversalSwiperSlider] Swiper not found. Load swiper-bundle.min.js before this script.");
2406      return;
2407    }
2408
2409    const ussParse = (val) => {
2410      if (val === undefined || val === null || val === "") return undefined;
2411      if (val === "true") return true;
2412      if (val === "false") return false;
2413      if (!isNaN(val)) return Number(val);
2414      return val;
2415    };
2416    
2417    const ussParseJSON = (str) => {
2418      if (!str) return undefined;
2419      try { return JSON.parse(str); } 
2420      catch (e) { 
2421        console.warn("[UniversalSwiperSlider] Invalid JSON:", str); 
2422        return undefined; 
2423      }
2424    };
2425
2426    document.querySelectorAll("[data-universal-swiper-slider]").forEach(function (ussSliderEl) {
2427      const ussSwiperSelector = ussSliderEl.getAttribute("data-swiper-container") || ".swiper";
2428      const ussNextSelector   = ussSliderEl.getAttribute("data-swiper-nav-next") || ".swiper-next";
2429      const ussPrevSelector   = ussSliderEl.getAttribute("data-swiper-nav-prev") || ".swiper-prev";
2430
2431      const ussContainerEl = ussSliderEl.querySelector(ussSwiperSelector);
2432      const ussNextEl      = ussSliderEl.querySelector(ussNextSelector);
2433      const ussPrevEl      = ussSliderEl.querySelector(ussPrevSelector);
2434
2435      if (!ussContainerEl) {
2436        console.warn("[UniversalSwiperSlider] Container not found for", ussSliderEl);
2437        return;
2438      }
2439
2440      const ussSpeed          = ussParse(ussSliderEl.getAttribute("data-swiper-speed"));
2441      const ussLoop           = ussParse(ussSliderEl.getAttribute("data-swiper-loop"));
2442      const ussRewind         = ussParse(ussSliderEl.getAttribute("data-swiper-rewind"));
2443      const ussAutoHeight     = ussParse(ussSliderEl.getAttribute("data-swiper-auto-height"));
2444      const ussCenteredSlides = ussParse(ussSliderEl.getAttribute("data-swiper-centered"));
2445      const ussFollowFinger   = ussParse(ussSliderEl.getAttribute("data-swiper-follow-finger"));
2446      const ussFreeMode       = ussParse(ussSliderEl.getAttribute("data-swiper-free-mode"));
2447      const ussSlideToClicked = ussParse(ussSliderEl.getAttribute("data-swiper-slide-to-clicked"));
2448      const ussSlidesPerView  = ussParse(ussSliderEl.getAttribute("data-swiper-slides-per-view"));
2449      const ussSpaceBetween   = ussParse(ussSliderEl.getAttribute("data-swiper-space-between"));
2450      const ussMousewheel     = ussParse(ussSliderEl.getAttribute("data-swiper-mousewheel"));
2451      const ussKeyboard       = ussParse(ussSliderEl.getAttribute("data-swiper-keyboard"));
2452
2453      const ussBreakpointsJSON = ussParseJSON(ussSliderEl.getAttribute("data-swiper-breakpoints"));
2454      const ussOptionsJSON     = ussParseJSON(ussSliderEl.getAttribute("data-swiper-options"));
2455
2456      const ussNavigation = ussNextEl && ussPrevEl
2457        ? { nextEl: ussNextEl, prevEl: ussPrevEl, disabledClass: "is-disabled" }
2458        : undefined;
2459
2460      const ussDefaults = {
2461        speed: 500,
2462        loop: false,
2463        rewind: false,
2464        autoHeight: false,
2465        centeredSlides: false,
2466        followFinger: true,
2467        freeMode: false,
2468        slideToClickedSlide: false,
2469        slidesPerView: 1,
2470        spaceBetween: 16,
2471        mousewheel: { forceToAxis: true },
2472        keyboard: { enabled: true, onlyInViewport: true },
2473        navigation: ussNavigation,
2474        breakpoints: {
2475          480: { slidesPerView: 1,   spaceBetween: 16 },
2476          768: { slidesPerView: 2,   spaceBetween: 16 },
2477          992: { slidesPerView: 2.5, spaceBetween: 16 }
2478        }
2479      };
2480
2481      const ussAttrOverrides = {
2482        ...(ussSpeed !== undefined ? { speed: ussSpeed } : {}),
2483        ...(ussLoop !== undefined ? { loop: ussLoop } : {}),
2484        ...(ussRewind !== undefined ? { rewind: ussRewind } : {}),
2485        ...(ussAutoHeight !== undefined ? { autoHeight: ussAutoHeight } : {}),
2486        ...(ussCenteredSlides !== undefined ? { centeredSlides: ussCenteredSlides } : {}),
2487        ...(ussFollowFinger !== undefined ? { followFinger: ussFollowFinger } : {}),
2488        ...(ussFreeMode !== undefined ? { freeMode: ussFreeMode } : {}),
2489        ...(ussSlideToClicked !== undefined ? { slideToClickedSlide: ussSlideToClicked } : {}),
2490        ...(ussSlidesPerView !== undefined ? { slidesPerView: ussSlidesPerView } : {}),
2491        ...(ussSpaceBetween !== undefined ? { spaceBetween: ussSpaceBetween } : {}),
2492        ...(ussMousewheel !== undefined
2493            ? (ussMousewheel ? { mousewheel: { forceToAxis: true } } : { mousewheel: false })
2494            : {}),
2495        ...(ussKeyboard !== undefined
2496            ? (ussKeyboard ? { keyboard: { enabled: true, onlyInViewport: true } } : { keyboard: false })
2497            : {}),
2498        ...(ussBreakpointsJSON ? { breakpoints: ussBreakpointsJSON } : {})
2499      };
2500
2501      const ussFinalOptions = Object.assign({}, ussDefaults, ussAttrOverrides, ussOptionsJSON || {});
2502      const ussSwiperInstance = new Swiper(ussContainerEl, ussFinalOptions);
2503      ussSliderEl._universalSwiper = ussSwiperInstance;
2504    });
2505  });
2506})();
2507</script>
2507
2508
2509<script>
2510// ============================================
2511// HIGHCHARTS MAP (Your Original Code)
2512// ============================================
2513(() => {
2514  let topoPromise;
2515  function getWorldTopo() {
2516    if (!topoPromise) {
2517      topoPromise = fetch('https://code.highcharts.com/mapdata/custom/world.topo.json')
2518        .then(r => r.json());
2519    }
2520    return topoPromise;
2521  }
2522
2523  function getSelectors(block) {
2524    return Array.from(block.querySelectorAll('[data-map-country-selector]'));
2525  }
2526
2527  function buildHighlightSet(block) {
2528    const set = new Set();
2529    getSelectors(block).forEach(el => {
2530      const code = (el.getAttribute('data-code') || '').trim().toUpperCase();
2531      if (code) set.add(code);
2532    });
2533    return set;
2534  }
2535
2536  function buildValuesMap(block) {
2537    const values = {};
2538    getSelectors(block).forEach(el => {
2539      const code = (el.getAttribute('data-code') || '').trim().toUpperCase();
2540      if (!code) return;
2541      values[code] = (el.getAttribute('data-value') || '').trim();
2542    });
2543    return values;
2544  }
2545
2546  function setActive(series, point, block, valuesMap) {
2547    const DIM_OPACITY = 0.8;
2548
2549    // Reset classes and opacities
2550    series.points.forEach(p => {
2551      if (p.graphic) {
2552        p.graphic.removeClass('is-active');
2553        p.graphic.attr({ opacity: 1 });
2554      }
2555    });
2556
2557    // If we have a selected point, mark it active and dim the rest
2558    if (point && point.graphic) {
2559      point.graphic.addClass('is-active');
2560      // Dim others
2561      series.points.forEach(p => {
2562        if (p !== point && p.graphic) {
2563          p.graphic.attr({ opacity: DIM_OPACITY });
2564        }
2565      });
2566    }
2567
2568    // Update readout
2569    const out = block.querySelector('[data-country-value]');
2570    if (out && point) {
2571      const iso = point.code || point['iso-a3'];
2572      const v = (valuesMap[iso] || '').trim();
2573      out.textContent = v.length ? v : (point.name || '');
2574    }
2575  }
2576
2577  function initBlock(block, topology) {
2578    const mapEl = block.querySelector('[data-map-container]');
2579    if (!mapEl) return;
2580
2581    const highlightSet = buildHighlightSet(block);
2582    const valuesMap = buildValuesMap(block);
2583    const data = Array.from(highlightSet).map(code => ({ code, value: 1 }));
2584
2585    const chart = Highcharts.mapChart(mapEl, {
2586      chart: { map: topology, backgroundColor: 'transparent' },
2587      title: { text: '' },
2588      credits: { enabled: false },
2589      legend: { enabled: false },
2590      accessibility: { enabled: false, keyboardNavigation: { enabled: false } },
2591      mapNavigation: { enabled: false },
2592      tooltip: {
2593        useHTML: true,
2594        backgroundColor: 'transparent',
2595        borderWidth: 0,
2596        shadow: false,
2597        formatter: function () {
2598          return `<div class="custom-tooltip">${this.point?.name || ''}</div>`;
2599        }
2600      },
2601      series: [{
2602        data,
2603        joinBy: ['iso-a3','code'],
2604        borderColor: 'rgba(134,134,134,0.5)',
2605        borderWidth: 0.5,
2606        color: {
2607          linearGradient: { x1: 0, y1: 0, x2: 1, y2: 0 },
2608          stops: [[0,'#FFA912'], [1,'#EF3800']]
2609        },
2610        nullColor: 'rgba(0,0,0,0)',
2611        states: {
2612          hover:   { borderColor: 'rgba(134,134,134,0.5)', borderWidth: 0.5 },
2613          select:  { enabled: false },
2614          inactive:{ enabled: false }
2615        },
2616        point: {
2617          events: {
2618            click: function () {
2619              setActive(this.series, this, block, valuesMap);
2620              chart.tooltip.refresh(this);
2621            }
2622          }
2623        }
2624      }]
2625    });
2626
2627    const series = chart.series[0];
2628
2629    const findPointByISO = (iso) => series.points.find(p => (p.code || p['iso-a3']) === iso);
2630
2631    // Bind list interactions
2632    getSelectors(block).forEach(el => {
2633      const getISO = () => (el.getAttribute('data-code') || '').trim().toUpperCase();
2634
2635      el.addEventListener('click', () => {
2636        const iso = getISO();
2637        if (!iso) return;
2638        const pt = findPointByISO(iso);
2639        if (!pt) return;
2640        setActive(series, pt, block, valuesMap);
2641        chart.tooltip.refresh(pt);
2642      });
2643
2644      const showTip = () => {
2645        const iso = getISO();
2646        if (!iso) return;
2647        const pt = findPointByISO(iso);
2648        if (!pt) return;
2649        pt.setState('hover');
2650        chart.tooltip.refresh(pt);
2651      };
2652
2653      const hideTip = () => {
2654        const iso = getISO();
2655        if (!iso) return;
2656        const pt = findPointByISO(iso);
2657        if (pt) pt.setState();
2658        chart.tooltip.hide(0);
2659      };
2660
2661      el.addEventListener('mouseenter', showTip);
2662      el.addEventListener('mouseleave', hideTip);
2663      el.addEventListener('focusin', showTip);
2664      el.addEventListener('focusout', hideTip);
2665    });
2666  }
2667
2668  getWorldTopo().then(topology => {
2669    document.querySelectorAll('.locations_map-block').forEach(block => initBlock(block, topology));
2670  });
2671})();
2672</script>
2672
2673
2674<script>
2675// ============================================
2676// NEWSROOM INTEGRATION
2677// ============================================
2678const jsonUrl = "https://rss.globenewswire.com/JsonFeed/organization/aRc3VEsdJx4qXYUc-W1GfA==/content/fulltext/attachments/all/StartDate/20240822"; 
2679
2680fetch(jsonUrl)
2681  .then(response => response.json())
2682  .then(data => {
2683    const list = document.querySelector(".newsroom-render_list");
2684    if (!list) return;
2685    
2686    list.innerHTML = "";
2687
2688    data.slice(0, 3).forEach(item => {
2689      const newsItem = document.createElement("div");
2690      newsItem.classList.add("newsroom-render_item");
2691
2692      const imageUrl = item.Attachments?.[0]?.Url 
2693        || "https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894ddaf39fa3a2fde6541ad_greyimg.jpg";
2694
2695      newsItem.innerHTML = `
2696        <a data-hover-card="card" href="${item.Url}" class="newsroom-render_link w-inline-block">
2697          <div class="newsroom-render_image-wrapper" data-hover-card="image">
2698            <img loading="lazy" alt="${item.Title}" src="${imageUrl}" class="newsroom-render_image">
2699          </div>
2700          <div class="newsroom-render_item-content">
2701            <h3 class="newsroom-render_heading">${item.Title}</h3>
2702            <div class="spacer-xsmall"></div>
2703            <p class="newsroom-render_summary">${item.ContentSummary}</p>
2704            <div class="spacer-small"></div>
2705            <div class="button-group">
2706              <div class="button is-link">
2707                <div>Read more</div>
2708                <div class="icon-embed-xxsmall w-embed">
2709                  <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2710                    <path d="M6 3L11 8L6 13" stroke="CurrentColor" stroke-width="1.5"></path>
2711                  </svg>
2712                </div>
2713              </div>
2714            </div>
2715          </div>
2716        </a>
2717      `;
2718
2719      list.appendChild(newsItem);
2720    });
2721  })
2722  .catch(error => {
2723    console.error("Error fetching newsroom JSON:", error);
2724  });
2725</script>
2725
2726
2727<script>
2728// ============================================
2729// RIVE ANIMATIONS
2730// ============================================
2731document.addEventListener('DOMContentLoaded', function () {
2732  const riveElements = document.querySelectorAll('.rive-animation');
2733
2734  riveElements.forEach(canvas => {
2735    const src = canvas.getAttribute('data-src');
2736    const type = canvas.getAttribute('data-type');
2737    const stateMachine = canvas.getAttribute('data-state-machine');
2738    const artboard = canvas.getAttribute('data-artboard');
2739    const autoplay = canvas.getAttribute('data-autoplay') === 'true';
2740    const scrollThreshold = parseFloat(canvas.getAttribute('data-scroll-threshold')) || 0.4;
2741
2742    let riveInstance = null;
2743    let hasPlayed = false;
2744
2745    function fitCanvasToCSS() {
2746      const dpr = window.devicePixelRatio || 1;
2747      const rect = canvas.getBoundingClientRect();
2748      canvas.width = rect.width * dpr;
2749      canvas.height = rect.height * dpr;
2750    }
2751
2752    function loadRive() {
2753      if (riveInstance) {
2754        riveInstance.cleanup();
2755      }
2756      fitCanvasToCSS();
2757      riveInstance = new rive.Rive({
2758        src: src,
2759        canvas: canvas,
2760        autoplay: autoplay,
2761        artboard: artboard,
2762        stateMachines: stateMachine ? [stateMachine] : []
2763      });
2764    }
2765
2766    function init() {
2767      if (hasPlayed) return;
2768      hasPlayed = true;
2769      loadRive();
2770    }
2771
2772    if (type === 'page-load') {
2773      init();
2774    } else if (type === 'scroll') {
2775      const observer = new IntersectionObserver((entries, obs) => {
2776        entries.forEach(entry => {
2777          if (entry.isIntersecting && entry.intersectionRatio >= scrollThreshold) {
2778            init();
2779            obs.unobserve(canvas);
2780          }
2781        });
2782      }, {
2783        threshold: buildThresholdList(scrollThreshold)
2784      });
2785      observer.observe(canvas);
2786    }
2787
2788    let resizeTimer;
2789    window.addEventListener('resize', () => {
2790      clearTimeout(resizeTimer);
2791      resizeTimer = setTimeout(() => {
2792        if (hasPlayed && riveInstance) {
2793          fitCanvasToCSS();
2794          riveInstance.resizeDrawingSurfaceToCanvas();
2795        }
2796      }, 200);
2797    });
2798  });
2799
2800  function buildThresholdList(mainThreshold) {
2801    const thresholds = [];
2802    for (let i = 0; i <= 1.0; i += 0.1) {
2803      thresholds.push(i);
2804    }
2805    if (!thresholds.includes(mainThreshold)) {
2806      thresholds.push(mainThreshold);
2807    }
2808    return thresholds.sort();
2809  }
2810});
2811</script>
2811<script>
2812  // Respect prefers-reduced-motion
2813  const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
2814  // Set initial "not drawn" state
2815  gsap.set("#bolt-stroke", { strokeDasharray: 1, strokeDashoffset: 1 });
2816  gsap.set("#bolt-mask",  { strokeDasharray: 1, strokeDashoffset: 1 });
2817  if (reduce) {
2818    // Jump to finished if user prefers less motion
2819    gsap.set("#bolt-stroke", { strokeDashoffset: 0 });
2820    gsap.set("#bolt-mask",  { strokeDashoffset: 0 });
2821  } else {
2822    // Timeline: draw outline, then sweep-fill (slightly overlapped so it feels snappy)
2823    const tl = gsap.timeline({ defaults: { ease: "power3.out" } });
2824    tl.to("#bolt-stroke", { duration: 1.2, strokeDashoffset: 0 })
2825      .to("#bolt-mask",  { duration: 0.9,  strokeDashoffset: 0 }, "-=0.6");
2826  }
2827</script>
2827
2828
2829<!-- PERFORMANCE FIXES: Defer heavy third-party scripts -->
2830<script>
2831(function() {
2832  'use strict';
2833  
2834  const loaded = {
2835    elfsight: false,
2836    consent: false
2837  };
2838  
2839  // PERFORMANCE FIX #3: Trigger Elfsight lazy load
2840  function loadElfsight() {
2841    if (loaded.elfsight) return;
2842    loaded.elfsight = true;
2843    
2844    // Call the Elfsight loader that's defined in the embed code
2845    if (typeof window.loadElfsight === 'function') {
2846      window.loadElfsight();
2847    }
2848  }
2849  
2850  // PERFORMANCE FIX #4: Defer ConsentPro (if you find it)
2851  function loadConsent() {
2852    if (loaded.consent) return;
2853    loaded.consent = true;
2854    // Add ConsentPro script here once you find it
2855  }
2856  
2857  // STRATEGY 1: Load on user interaction
2858  let interacted = false;
2859  function handleInteraction() {
2860    if (interacted) return;
2861    interacted = true;
2862    loadElfsight();
2863  }
2864  
2865  // Load on scroll (user scrolls past 200px)
2866  let scrollTriggered = false;
2867  window.addEventListener('scroll', function() {
2868    if (scrollTriggered) return;
2869    if (window.scrollY > 200) {
2870      scrollTriggered = true;
2871      loadElfsight();
2872    }
2873  }, { passive: true });
2874  
2875  // Or on first click/touch/mousemove
2876  ['click', 'touchstart', 'mousemove'].forEach(function(event) {
2877    document.addEventListener(event, handleInteraction, { once: true, passive: true });
2878  });
2879  
2880  // STRATEGY 2: Load after page is fully interactive
2881  window.addEventListener('load', function() {
2882    setTimeout(function() {
2883      loadConsent();
2884      
2885      // Fallback: load Elfsight after 3s if user hasn't interacted
2886      setTimeout(function() {
2887        if (!loaded.elfsight) loadElfsight();
2888      }, 3000);
2889    }, 2000);
2890  });
2891  
2892  // PERFORMANCE FIX #1B: Set fetchpriority on LCP images via JS fallback
2893  document.addEventListener('DOMContentLoaded', function() {
2894    // Target hero images
2895    const heroImages = document.querySelectorAll('.slots-header_element img, .games_image img');
2896    heroImages.forEach(function(img, index) {
2897      if (index < 3 && !img.hasAttribute('fetchpriority')) {
2898        img.setAttribute('fetchpriority', 'high');
2899      }
2900    });
2901  });
2902})();
2903</script>
2903</body></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.